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 :: Динамичное создание ЧПУ
Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013
Помог: 91 раз(а)
Вообщем создавал уже как то тему, даже умудрился сделать кривой ЧПУ(делал через switch) для начала - понятное дело что так делать не нужно. Увидел несколько вариантов реализации и попал в ступор. То что нужно перенаправлять все не существующие запросы в один файл это понятно.
Но как потом формировать нужную выборку? Я понимаю это так - вбил пользователь несуществующий адрес - он улетел в index.php например и там обработался. Но как обработался? Если без ЧПУ наши ссылки выглядят <a href="index.php?id=<?=$row['id']?=>">link</a>
то что нужно писать туда когда у нас ЧПУ? Алиас-ы? Если да, то как потом формировать выборку? Селект бла бла WHERE алиас = тот на который нажали? - что то не очень мне нравится этот вариант. Я видел что все ссылки остаются как прежде, только обрезаются регулярными выражениями и преобразуются в нужный вариант(ЧПУ) уже при загрузке документа - но толком ничего не понял. Видел добавление алиасов в БД для каждого link-а, но как этот link добавить наряду с alias-ом в БД и как обрабатывать в скрипте если нужно делать именно так? Слишком много процедур мне кажется... поэтому хочу узнать у вас. Объяснение многих оставляет желать лучшего
Сам процесс не понятен. Если можно объясните пошагово что должно происходить. И как это сделать. Я много всякого перерыл, но НИ ГДЕ не видел как сделать ЧПУ с нуля и с нормальным объяснением. Идею словить не могу до конца.
DlTA
Отправлено: 22 Августа, 2013 - 10:44:57
Постоянный участник
Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010
Помог: 53 раз(а)
не пойму, проблема в том чтоб определиться Как обрабатывать, или в том Во что обрабатывать???
teddy
Отправлено: 22 Августа, 2013 - 10:45:52
Участник
Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013
Помог: 91 раз(а)
DlTA
скорее и то и другое
DlTA
Отправлено: 22 Августа, 2013 - 10:51:17
Постоянный участник
Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010
Помог: 53 раз(а)
берем $_SERVER['REQUEST_URI']
и делаем с ней что нам хоца, если нужно разрезаем, если не нужно, то ищем по полному тексту
teddy
Отправлено: 22 Августа, 2013 - 10:58:11
Участник
Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013
Помог: 91 раз(а)
DlTA
Опять не понятно
1. Интересует создание алиасов для статей например или другого контента который обновляется каждые 5 минут. Я видел в БД хранят линки реальные и их алиасы - но как это работает до конца никто не объяснил
2. Иные ссылки, которые просто должны быть преобразаны. - тут думаю только регулярки помогут(при формировании документа будут просто обрезать например амперсанды). Если да, то как быть с п1 ?
Ch_chov
Отправлено: 22 Августа, 2013 - 11:01:22
Постоянный участник
Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008 Откуда: из города
Помог: 90 раз(а)
Что бы использовать алиасы, нужно сделать специальную функцию для вывода ссылок в документ. В том числе в шаблоны.
DlTA
Отправлено: 22 Августа, 2013 - 11:02:57
Постоянный участник
Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010
Помог: 53 раз(а)
1, это делают скорее для поисковиков
что позволяет очень точно задать ссылку (часть)
а дальше эту часть берут и ищут по базе , если нашли то выдали
2 а тут, делают тот же explode() получают состовляющие ссылки, а дальше если модульная структура сайта то определяют какой модуль и остальные параметры и отправляют запрос в нужном направлении ан обработку.
возможен симбиоз этих 2х методов, например сначало проверяют по полной ссылке, если не нашли, то разбивают на части,
но нужно понимать какими подводными камнями это грозит, делать "хлебные крошки" будет мега "удовольствие"
teddy
Отправлено: 22 Августа, 2013 - 11:15:03
Участник
Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013
Помог: 91 раз(а)
//убрал предыдущий текст чтоб не мешал основному
Подготовил одну часть для критики. Сделал пока ЧПУ для статей. Структура таблицы со статьями:
1. id
2. title
3. article
4. alias
$db->query("INSERT INTO `articles` (`title`, `article`, `alias`) VALUES('$title', '$article', '$alias')") or die($db->error);
}
Пояснение: на основе тайтла который вводится Русскими буквами идет преобразование алиаса а потом добавляется в БД(функция не дописала, сделал по минимуму для теста)
Затем вывожу обычно но только уже сразу alias вместо ID
$result=$db->query("SELECT `title`, `article`, `alias` FROM `articles` ORDER BY id DESC") or die($db->error);
while($row=$result->fetch_assoc()){
echo$row['title']."<br />";
echo$row['article']."<br />";
echo"<a href=$row[alias]>Читать полностью</a>";
}
Ну а далее планирую использовать $row['alias'] вместо ID и делать выборку по нему если это будет необходимо(вдруг кто то захочет прочитать полностью статью и нажмет соответствующую кнопку) select article from articles WHERE alias='$alias' но тут опять же проблема вдруг кто то от балды добавит одинаковые алиасы... в голову пришел только DISTINCT, но смахивает на костыль в данном случае
Для статей как вам такой вариант? А для тех ссылок что висят всегда почти без изменений, те же ссылки меню например, уже использовать регулярное выражение - это нормальный ход? Имею ввиду первый и второй вариант
Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013
Помог: 91 раз(а)
Andruxa
Что угодно - расплывчитое понятие
Вероятно мне не очень хорошо удалось объяснить в чем именно заключается моя проблема, но решил её уже. Вроде как все нормально работает, программные ссылки отсутствуют абсолютно. Контент и файлы нормально подгружаются по необходимости, проблем не наблюдаю.
Вообщем тема сложная я думаю, что даже сложно объяснить на пальцах, как я решил... кстати обошелся без регулярных выражений вообще. Хотя много примеров видел с ними
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.