Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: ЧПУ и с чем его едят
Форумы портала PHP.SU » PHP » Программирование на PHP » ЧПУ и с чем его едят

Страниц (1): [1]
 

1. Garda1 - 09 Апреля, 2011 - 11:18:58 - перейти к сообщению
Структура сайта:

+ Главная
|
+ uslugi
| |
| + predpriyatiyam
| | |
| | + sharash
| | + montaj
| |
| + pokupatelyam
| | |
| | + sharash1 //Чтобы были имена уникальными
| | + montaj1 //добавляются цифры
| | + novosti_pokupatelyam
| | |
| | + 55
| | + 57
| + novosti_uslug
| |
| + 56
| + 59

C помощью .htaccess получаем ЧПУ-шный адрес, к примеру:

PHP:
скопировать код в буфер обмена
  1. $_GET['route'] = 'uslugi/predpriyatiyam/montaj';


и вопрос: "Как дальше с ним работать?"

мои действия в последствии оказались не совершенными, а точнее с самого начала бредовыми.
PHP:
скопировать код в буфер обмена
  1.  
  2. $switcher = explode('/',rtrim($_GET['route'],'/'));
  3. $content = parent::get_content(array_pop($switcher));
  4. if($content==false) $HTML = '404 ошибка';


C выводом обычных текстовых разделов(uslugi,predpriyatiyam,sharash,montaj) проблем не было.
Но теперь добавились 'одноуровневые' новости, как дать понять скрипту, что это ID новости?
А дальше ещё интереснее будет, поскольку будет интернет-магазин с неограниченным количеством уровней, типа
mysyte.ru/eshop/546/45/64/89/

Пожалуйста, научите пользоваться ЧПУ.
2. Garda1 - 10 Апреля, 2011 - 12:33:12 - перейти к сообщению
Я может совсем что-то глупое спрашиваю или в корне неверное?
Народ, помогите осмыслить как пользоваться ЧПУ, Пожалуйста.
Или хотя бы расскажите, как оно у вас работает...
3. zypikov - 10 Апреля, 2011 - 15:11:38 - перейти к сообщению
Цитата:
как пользоваться ЧПУ

Это что такое?
4. Garda1 - 10 Апреля, 2011 - 15:22:18 - перейти к сообщению
zypikov пишет:
Цитата:
как пользоваться ЧПУ

Это что такое?


ЧПУ (англ. Friendly URL) — веб-адреса, удобные для восприятия человеком (а также систем и методов построения таких адресов). Является аббревиатурой от словосочетания «человекопонятный урл» (где «урл» — жаргонное обозначение URL).
5. vanicon - 10 Апреля, 2011 - 22:23:14 - перейти к сообщению
ЧПУ делается с помощью модуля apace mod_rewrite, поищите в гугле насчет этого там много информации или на форуме, к примеру здесь описанны некоторые примеры для преобразование ссылок http://forum.php.su/topic.php?fo...1&topic=5869
6. Саныч - 10 Апреля, 2011 - 22:36:34 - перейти к сообщению
ищите по запросам ЧПУ, mod_rewrite и regexp изучайте и все станет ясно, тема вобщем-то не сложная...
7. Haron - 10 Апреля, 2011 - 22:45:54 - перейти к сообщению
Цитата:
C выводом обычных текстовых разделов(uslugi,predpriyatiyam,sharash,montaj) проблем не было.
Но теперь добавились 'одноуровневые' новости, как дать понять скрипту, что это ID новости?
А дальше ещё интереснее будет, поскольку будет интернет-магазин с неограниченным количеством уровней, типа
mysyte.ru/eshop/546/45/64/89/


Я эту проблему решил так:

Роутер подключает контроллеры по первому сегменту ссылки (У вас в данном случае это eshop). А затем контроллер разбирает оставшуюся часть (/546/45/64/89/). Идея здесь в том, что неограниченное количество уровней - должно быть только там, где это необходимо.
8. Garda1 - 11 Апреля, 2011 - 01:00:15 - перейти к сообщению
vanicon,Саныч mod_rewrite используется здесь
Garda1 пишет:
C помощью .htaccess получаем ЧПУ-шный адрес, к примеру:
PHP:
скопировать код в буфер обмена
  1. $_GET['route'] = 'uslugi/predpriyatiyam/montaj';

и вопрос: "Как дальше с ним работать?"


Haron пишет:
Я эту проблему решил так:

Роутер подключает контроллеры по первому сегменту ссылки (У вас в данном случае это eshop). А затем контроллер разбирает оставшуюся часть (/546/45/64/89/). Идея здесь в том, что неограниченное количество уровней - должно быть только там, где это необходимо.

Да, я тоже так предполагал сделать, но закасчег сегодня там(на определённом уровне) модуль подключил, а завтра уже в другом, а то и имена ссылок поменяет не eshop например, а magazin. То есть, если делать по такой логике, то скрипт получится не очень гибким.
9. Haron - 11 Апреля, 2011 - 02:03:48 - перейти к сообщению
Прозрачную замену или даже, альтернативный вызов eshop либо magazine, либо даже магазин - сделать не проблема.

Например вот так:

PHP:
скопировать код в буфер обмена
  1. // Массив для роутера
  2. $routes['shop'][1] = 'magazine';
  3. $routes['shop'][2] = 'eshop';
  4. $routes['shop'][2] = 'магазин';
  5.  
  6. // Поиск индекса в массиве
  7. function search_route($value, $route_array)
  8. {
  9.         foreach ($route_array as $key => $item)
  10.         {
  11.                 if (array_search($value, $item))
  12.                 {
  13.                         return $key;
  14.                 }
  15.         }
  16. }
  17.  
  18. // Возвращаем имя подключаемого контроллера
  19. $switcher = explode('/',rtrim($_GET['route'],'/'));
  20. $first_level = $switcher[0]
  21. $controller = search_route($first_level, $routes)
  22. // Название контроллера ('shop') получили, ну и дальше знаете что с ним делать.

 

Powered by ExBB FM 1.0 RC1