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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Динамичное создание ЧПУ

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
teddy
Отправлено: 22 Августа, 2013 - 10:37:42
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




Вообщем создавал уже как то тему, даже умудрился сделать кривой ЧПУ(делал через switch) для начала - понятное дело что так делать не нужно. Увидел несколько вариантов реализации и попал в ступор. То что нужно перенаправлять все не существующие запросы в один файл это понятно.

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

Сам процесс не понятен. Если можно объясните пошагово что должно происходить. И как это сделать. Я много всякого перерыл, но НИ ГДЕ не видел как сделать ЧПУ с нуля и с нормальным объяснением. Идею словить не могу до конца.
 
 Top
DlTA
Отправлено: 22 Августа, 2013 - 10:44:57
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




не пойму, проблема в том чтоб определиться Как обрабатывать, или в том Во что обрабатывать???
 
 Top
teddy
Отправлено: 22 Августа, 2013 - 10:45:52
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




DlTA
скорее и то и другое
 
 Top
DlTA
Отправлено: 22 Августа, 2013 - 10:51:17
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




берем $_SERVER['REQUEST_URI']
и делаем с ней что нам хоца, если нужно разрезаем, если не нужно, то ищем по полному тексту
 
 Top
teddy
Отправлено: 22 Августа, 2013 - 10:58:11
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




DlTA
Опять не понятно

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

2. Иные ссылки, которые просто должны быть преобразаны. - тут думаю только регулярки помогут(при формировании документа будут просто обрезать например амперсанды). Если да, то как быть с п1 ?
 
 Top
Ch_chov
Отправлено: 22 Августа, 2013 - 11:01:22
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




Что бы использовать алиасы, нужно сделать специальную функцию для вывода ссылок в документ. В том числе в шаблоны.
 
 Top
DlTA
Отправлено: 22 Августа, 2013 - 11:02:57
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




1, это делают скорее для поисковиков
что позволяет очень точно задать ссылку (часть)
а дальше эту часть берут и ищут по базе , если нашли то выдали

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

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

но нужно понимать какими подводными камнями это грозит, делать "хлебные крошки" будет мега "удовольствие"
 
 Top
teddy
Отправлено: 22 Августа, 2013 - 11:15:03
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




//убрал предыдущий текст чтоб не мешал основному

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

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

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

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

Для статей как вам такой вариант? А для тех ссылок что висят всегда почти без изменений, те же ссылки меню например, уже использовать регулярное выражение - это нормальный ход? Имею ввиду первый и второй вариант

(Отредактировано автором: 22 Августа, 2013 - 12:38:21)

 
 Top
Andruxa
Отправлено: 22 Августа, 2013 - 12:41:29
Post Id



Частый гость


Покинул форум
Сообщений всего: 140
Дата рег-ции: Март 2010  


Помог: 0 раз(а)




Я тоже в ЧПУ не силен, но нашел хороший вариант которым и пользуюсь.
файл .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

А потом как сказал DlTA делаем с полученным значением что угодно вставлять куда угодно
PHP:
скопировать код в буфер обмена
  1.  if( $url[2]=='viwer  '){    
  2.    echo "Что то делаем!";
  3. }

(Отредактировано автором: 22 Августа, 2013 - 12:44:38)

 
 Top
teddy
Отправлено: 22 Августа, 2013 - 17:57:27
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




Andruxa
Что угодно - расплывчитое понятие

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

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

Всем спасибо кто пытался помочь
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB