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 » » Вопросы новичков » Динамичное создание ЧПУ

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

1. teddy - 22 Августа, 2013 - 10:37:42 - перейти к сообщению
Вообщем создавал уже как то тему, даже умудрился сделать кривой ЧПУ(делал через switch) для начала - понятное дело что так делать не нужно. Увидел несколько вариантов реализации и попал в ступор. То что нужно перенаправлять все не существующие запросы в один файл это понятно.

Но как потом формировать нужную выборку? Я понимаю это так - вбил пользователь несуществующий адрес - он улетел в index.php например и там обработался. Но как обработался? Если без ЧПУ наши ссылки выглядят <a href="index.php?id=<?=$row['id']?=>">link</a>
то что нужно писать туда когда у нас ЧПУ? Алиас-ы? Если да, то как потом формировать выборку? Селект бла бла WHERE алиас = тот на который нажали? - что то не очень мне нравится этот вариант. Я видел что все ссылки остаются как прежде, только обрезаются регулярными выражениями и преобразуются в нужный вариант(ЧПУ) уже при загрузке документа - но толком ничего не понял. Видел добавление алиасов в БД для каждого link-а, но как этот link добавить наряду с alias-ом в БД и как обрабатывать в скрипте если нужно делать именно так? Слишком много процедур мне кажется... поэтому хочу узнать у вас. Объяснение многих оставляет желать лучшего

Сам процесс не понятен. Если можно объясните пошагово что должно происходить. И как это сделать. Я много всякого перерыл, но НИ ГДЕ не видел как сделать ЧПУ с нуля и с нормальным объяснением. Идею словить не могу до конца.
2. DlTA - 22 Августа, 2013 - 10:44:57 - перейти к сообщению
не пойму, проблема в том чтоб определиться Как обрабатывать, или в том Во что обрабатывать???
3. teddy - 22 Августа, 2013 - 10:45:52 - перейти к сообщению
DlTA
скорее и то и другое
4. DlTA - 22 Августа, 2013 - 10:51:17 - перейти к сообщению
берем $_SERVER['REQUEST_URI']
и делаем с ней что нам хоца, если нужно разрезаем, если не нужно, то ищем по полному тексту
5. teddy - 22 Августа, 2013 - 10:58:11 - перейти к сообщению
DlTA
Опять не понятно

1. Интересует создание алиасов для статей например или другого контента который обновляется каждые 5 минут. Я видел в БД хранят линки реальные и их алиасы - но как это работает до конца никто не объяснил

2. Иные ссылки, которые просто должны быть преобразаны. - тут думаю только регулярки помогут(при формировании документа будут просто обрезать например амперсанды). Если да, то как быть с п1 ?
6. Ch_chov - 22 Августа, 2013 - 11:01:22 - перейти к сообщению
Что бы использовать алиасы, нужно сделать специальную функцию для вывода ссылок в документ. В том числе в шаблоны.
7. DlTA - 22 Августа, 2013 - 11:02:57 - перейти к сообщению
1, это делают скорее для поисковиков
что позволяет очень точно задать ссылку (часть)
а дальше эту часть берут и ищут по базе , если нашли то выдали

2 а тут, делают тот же explode() получают состовляющие ссылки, а дальше если модульная структура сайта то определяют какой модуль и остальные параметры и отправляют запрос в нужном направлении ан обработку.

возможен симбиоз этих 2х методов, например сначало проверяют по полной ссылке, если не нашли, то разбивают на части,

но нужно понимать какими подводными камнями это грозит, делать "хлебные крошки" будет мега "удовольствие"
8. teddy - 22 Августа, 2013 - 11:15:03 - перейти к сообщению
//убрал предыдущий текст чтоб не мешал основному

Подготовил одну часть для критики. Сделал пока ЧПУ для статей. Структура таблицы со статьями:
1. id
2. title
3. article
4. alias
Спойлер (Отобразить)

Пояснение: на основе тайтла который вводится Русскими буквами идет преобразование алиаса а потом добавляется в БД(функция не дописала, сделал по минимуму для теста)

Затем вывожу обычно но только уже сразу alias вместо ID
Спойлер (Отобразить)

Ну а далее планирую использовать $row['alias'] вместо ID и делать выборку по нему если это будет необходимо(вдруг кто то захочет прочитать полностью статью и нажмет соответствующую кнопку) select article from articles WHERE alias='$alias' но тут опять же проблема вдруг кто то от балды добавит одинаковые алиасы... в голову пришел только DISTINCT, но смахивает на костыль в данном случае

Для статей как вам такой вариант? А для тех ссылок что висят всегда почти без изменений, те же ссылки меню например, уже использовать регулярное выражение - это нормальный ход? Имею ввиду первый и второй вариант
9. Andruxa - 22 Августа, 2013 - 12:41:29 - перейти к сообщению
Я тоже в ЧПУ не силен, но нашел хороший вариант которым и пользуюсь.
файл .htaccess
CODE (htmlphp):
скопировать код в буфер обмена
  1. AddDefaultCharset utf-8
  2. DirectoryIndex index.php
  3. RewriteEngine On
  4. Options +FollowSymlinks
  5. RewriteCond   %{REQUEST_FILENAME}       !-d
  6. RewriteCond   %{REQUEST_FILENAME}       !-f
  7. RewriteRule   ^(.*) index.php?%{QUERY_STRING}

Сделал функции:
PHP:
скопировать код в буфер обмена
  1. function get_url(){
  2.     $URI = urldecode($_SERVER['REQUEST_URI']);
  3.     $get_url=explode("/", $URI);
  4.     return $get_url;
  5. }


ссылки получаются вида: mysite/module/viwer и т.д

дальше разбираем url
PHP:
скопировать код в буфер обмена
  1. $url=get_url();


А потом как сказал DlTA делаем с полученным значением что угодно вставлять куда угодно
PHP:
скопировать код в буфер обмена
  1.  if( $url[2]=='viwer  '){    
  2.    echo "Что то делаем!";
  3. }
10. teddy - 22 Августа, 2013 - 17:57:27 - перейти к сообщению
Andruxa
Что угодно - расплывчитое понятие

Вероятно мне не очень хорошо удалось объяснить в чем именно заключается моя проблема, но решил её уже. Вроде как все нормально работает, программные ссылки отсутствуют абсолютно. Контент и файлы нормально подгружаются по необходимости, проблем не наблюдаю.

Вообщем тема сложная я думаю, что даже сложно объяснить на пальцах, как я решил... кстати обошелся без регулярных выражений вообще. Хотя много примеров видел с ними

Всем спасибо кто пытался помочь

 

Powered by ExBB FM 1.0 RC1