Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Разное

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Связка текстовой ссылки и id товара.
 
 автор: Sfinks   (18.03.2012 в 23:26)   письмо автору
 
 

Предполагаю сделать в ЧПУ текстовые имена страниц с товарами. Одновременно в БД товар идентифицируется как обычно, т.е. по числовому id. Как их лучше связать? Я вижу 3 кардинально разных способа.

1. Через БД. Он самый очевидный, т.к. нужно только добавить поле urlName и по нему сопоставлять. Но не уверен что он самый удачный. Хотя бы потому, что прежде чем определить что вообще хочет пользователь, уже нужно подключиться к БД и потом только принимать решение о дальнейших действиях.

2. Через include подключать php-файл в котором будет ассоциативный массив типа
<?php
$tovar_id 
= array
  (
  
"moroznaya-svezhest.html" => 1,
  
"golubaya-laguna.html" => 2,
  
// и т.д.
  
);
?>
товары будут не особо часто добавляться, поэтому можно и попереписывать этот файл при модификации списка. Но php вроде как медленный.

3. mod_rewrite и отдельное правило для каждого адреса. Но переписывать скриптом .htaccess - это как-то злостно )

Кто что может по этому вопросу посоветовать?

  Ответить  
 
 автор: qwofer   (18.03.2012 в 23:53)   письмо автору
 
   для: Sfinks   (18.03.2012 в 23:26)
 

Не совсем понимаю как будет запрашиваться товар:
/products.php?tovar_id=5
или
/golubaya-laguna.html

?

  Ответить  
 
 автор: qwofer   (19.03.2012 в 00:11)   письмо автору
 
   для: 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) {
          
// значит это наш товар и делаем то что нужно
     
}
}
?>

  Ответить  
 
 автор: Sfinks   (19.03.2012 в 07:29)   письмо автору
 
   для: 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-ым конкретику по товару.

Может еще есть варианты?

  Ответить  
 
 автор: cheops   (19.03.2012 в 12:36)   письмо автору
 
   для: Sfinks   (18.03.2012 в 23:26)
 

Есть одна хитрость, возможно она вам будет интересна. Формировать адреса следующим образом
moroznaya-svezhest-1.html
golubaya-laguna-2.html
в результате вы можете писать перед числом все, что угодно, а mod_rewrite будет реагировать только на идентификатор перед .html. Нагрузка на код/Apache снижается, URL принимают нужную вам форму (понятно, что число можно и по другому в адрес упаковать).

  Ответить  
 
 автор: Sfinks   (19.03.2012 в 12:43)   письмо автору
 
   для: cheops   (19.03.2012 в 12:36)
 

Хм.... Просто! Как и все гениальное )
Я правильно понимаю, что требуемый "эффект" при этом будет получен?

  Ответить  
 
 автор: cheops   (19.03.2012 в 13:38)   письмо автору
 
   для: Sfinks   (19.03.2012 в 12:43)
 

Да.

  Ответить  
 
 автор: Sfinks   (19.03.2012 в 13:46)   письмо автору
 
   для: cheops   (19.03.2012 в 13:38)
 

Спасибище )))

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования