|
|
|
| Предполагаю сделать в ЧПУ текстовые имена страниц с товарами. Одновременно в БД товар идентифицируется как обычно, т.е. по числовому id. Как их лучше связать? Я вижу 3 кардинально разных способа.
1. Через БД. Он самый очевидный, т.к. нужно только добавить поле urlName и по нему сопоставлять. Но не уверен что он самый удачный. Хотя бы потому, что прежде чем определить что вообще хочет пользователь, уже нужно подключиться к БД и потом только принимать решение о дальнейших действиях.
2. Через include подключать php-файл в котором будет ассоциативный массив типа
<?php
$tovar_id = array
(
"moroznaya-svezhest.html" => 1,
"golubaya-laguna.html" => 2,
// и т.д.
);
?>
| товары будут не особо часто добавляться, поэтому можно и попереписывать этот файл при модификации списка. Но php вроде как медленный.
3. mod_rewrite и отдельное правило для каждого адреса. Но переписывать скриптом .htaccess - это как-то злостно )
Кто что может по этому вопросу посоветовать? | |
|
|
|
|
|
|
|
для: Sfinks
(18.03.2012 в 23:26)
| | Не совсем понимаю как будет запрашиваться товар:
/products.php?tovar_id=5
или
/golubaya-laguna.html
? | |
|
|
|
|
|
|
|
для: Sfinks
(18.03.2012 в 23:26)
| | Трижды перечитал Ваше сообщение.
Можно поступить и более легким, четвертым способом.
Давайте все наши файлы, которые нужно подключать по ID разместим в папке pages/ и они будут иметь вид
1-moroznaya-svezhest.html
2-golubaya-laguna.html
и т.д.
Тогда:
функцией scandir() - Получить список файлов и каталогов в отсортированном виде (по умолчанию, сортировка в алфавитном порядке по возрастанию). Функция появилась в PHP5.
<?php
$file_list = scandir('pages/');
/* Результатом будет нечто вроде:
Array (
[0] => .
[1] => ..
[2] => bar.php
[3] => foo.txt
[4] => somedir
)
*/
?>
|
Далее каждый элемент массива разделяем функцией explode используя в качестве разделитея дефис:
<?php
for($i = 2; $i < sizeof($file_list); $i++) {
$f = explode("-", $file_list[$i]);
if($f[0] == $tovar_id) {
// значит это наш товар и делаем то что нужно
}
}
?>
|
| |
|
|
|
|
|
|
|
для: qwofer
(19.03.2012 в 00:11)
| | > Можно поступить и более легким, четвертым способом.
Они и первые 3 не сложные. Вопрос в скорости. При чем Ваш вариант явно проигрывает всем остальным.
Не, Вы не в теме похоже. Или я не умею объяснять ;-)
Файл один - например index.php. Так что размещать мы нигде ничего не будем. Но за попытку помочь все равно спасибо )
А ссылки вида:
http://site.ru/bukety/moroznaya-svezhest.html
http://site.ru/bukety/golubaya-laguna.html
|
Думаю нужно комбинировать 1ый и 3ий вариант. 3-им разделять логику по разделам сайта, а затем уже 1-ым конкретику по товару.
Может еще есть варианты? | |
|
|
|
|
|
|
|
для: Sfinks
(18.03.2012 в 23:26)
| | Есть одна хитрость, возможно она вам будет интересна. Формировать адреса следующим образом
moroznaya-svezhest-1.html
golubaya-laguna-2.html
| в результате вы можете писать перед числом все, что угодно, а mod_rewrite будет реагировать только на идентификатор перед .html. Нагрузка на код/Apache снижается, URL принимают нужную вам форму (понятно, что число можно и по другому в адрес упаковать). | |
|
|
|
|
|
|
|
для: cheops
(19.03.2012 в 12:36)
| | Хм.... Просто! Как и все гениальное )
Я правильно понимаю, что требуемый "эффект" при этом будет получен? | |
|
|
|
|
|
|
|
для: Sfinks
(19.03.2012 в 12:43)
| | Да. | |
|
|
|
|
|
|
|
для: cheops
(19.03.2012 в 13:38)
| | Спасибище ))) | |
|
|
|