Преобразуем динамические URL в ЧПУ-ссылки используя GET-параметры
Здравствуйте, уважаемый посетитель!
В прошлой статье мы рассмотрели достаточно простой способ применения на сайте ЧПУ с непосредственным преобразованием динамических ссылок в человеко-понятные урлы и наоборот. Сегодня же будем это делать другим способом - используя для этих целей GET-параметры обычных динамических ссылок.
При этом, в данной статье выполним первую часть - создадим механизм преобразования GET-параметров обычных динамических ссылок в статические адреса с человеко-понятными урлами. А, обратное преобразование - из статических ЧПУ в динамические адреса с получением необходимых данных для формирования динамических страниц рассмотрим в следующей статье.
Следует отметить, что данный способ является довольно логичным и удобным для обработки информации, заложенной в адресах веб-страниц. Что делает его более предпочтительным по сравнению с предыдущим вариантом.
Как и ранее, необходимые преобразования будут проводиться на локальном веб-сервере. Для варианта, размещенного на хостинге, все действия выполняются аналогичным образом.
Содержание
- Создаем новые записи значений GET-параметров таблицы MySQL
- Используя GET-параметры преобразуем обычные динамические ссылки в ЧПУ
- Исходные файлы сайта
Создаем новые записи значений GET-параметров таблицы MySQL
Для того, чтобы в дальнейшем иметь возможность работать с GET-параметрами создадим для них в таблице MySQL соответствующие поля и запишем нужные данные.
При этом, для наименования новых полей таблицы обратимся к приведенному ранее примеру обычной динамической ссылки и соответствующему ей адресу с человеко-понятным урлом с уровнем вложенности равным 3:
- динамическая ссылка - httρ://newsite.local/index.php?section=article&rubric=carjacking&page=1;
- ЧПУ - httρ://newsite.local/statyi/ugon-avtomobiley/statistika-ugonov-2016;
Исходя из этого составим таблицу соответствия наименований GΕT-параметров и полей таблицы к их значениям.
№ пп | Наименования / значения GET-параметров (полей) | section | rubric | page |
1 | Значение в динамической ссылке | article | carjacking | 1 |
2 | Значение в ЧПУ | statyi | ugon-avtomobiley | statistika-ugonov-2016 |
Рис.1 Таблица соответствия GΕT-параметров в динамической ссылке и ЧПУ
Таким образом создадим в таблице "url" три поля - "section", "rubric" и "page".
Кроме того, для того, чтобы в цепочке "хлебные крошки" иметь возможность отображения пути к странице по-русски, добавим еще три поля, в которых будут также храниться человеко-понятные урлы, но только на русском языке. И назовем их соответственно, "section-rus", "rubric-rus" и "page-rus"
Структура таблицы "url" с добавленными полями показана на следующем скриншоте.

Рис.2 Добавление новых полей в таблицу MySQL
А теперь преобразуем предыдущую таблицу добавив в нее остальные значения GΕT-параметров и их русскоязычных словообразований для всех имеющихся на данный момент страниц сайта.
id (№ пп) |
Заголовок страницы (title) | section | section-rus | rubric | rubric-rus | page | page-rus |
1 | Главная | ||||||
2 | Статистика угонов | statyi | Статьи | ugon-avtomobiley | Угон автомобилей | statistika-ugonov | Статистика угонов за 2016 год |
3 | Способы маркировки | sposobi-markirovki | Способы маркировки | ||||
4 | Получить скидку | poluchity-skidku | Получить скидку | ||||
5 | Контакты | kontakti | Контакты |
Рис.3 Таблица соответствия полей и значений GΕT-параметров и русскоязычных словообразований
Как видно, страница с заголовком "Статистика угонов" здесь имеет уровень вложенности равный 3 (УВ3), а остальные - УВ1. В таблице базы данных это будет выглядеть следующим образом.

Рис.4 Запись в таблицу MySQL значений GET-параметров и русскоязычных словообразований
Таким образом мы записали в базу данных все необходимые данные для дальнейшего их использования при формировании статических ЧПУ.
Используя GET-параметры преобразуем обычные динамические ссылки в ЧПУ
После того, как мы сохранили в базе данных нужные значения GET-параметров, можно переходить к формированию человеко-понятных урлов.
Для этого достаточно будет сделать некоторые изменения в файлах "menu.php" и "ftr-menu.php". Ниже показан файл "menu.php", где более светлым цветом обозначены строки, которые добавлены, или заменены по сравнению с предыдущим вариантом формирования обычных динамических адресов.
-
-
//----Формирование главного меню-------------
-
$data_bd = getAll('url');
-
for ($i = 0; $i < count($data_bd); $i++) {
-
$id = $data_bd[$i]['id'];
-
$title = $data_bd[$i]['title'];
-
$section = $data_bd[$i]['section'];
-
$rubric = $data_bd[$i]['rubric'];
-
$page = $data_bd[$i]['page'];
-
if (!empty($section)) $section_slash = "/".$section;
-
else
-
$section_slash = "";
-
if (!empty($rubric)) $rubric_slash = "/".$rubric;
-
else
-
$rubric_slash = "";
-
if (!empty($page)) $page_slash = "/".$page;
-
else
-
$page_slash = "/";
-
if ($current_url == $page) echo '
- .$section_slash.$rubric_slash.$page_slash.
'">'.$title.' ';
-
else
-
echo '
- .$section_slash.$rubric_slash.$page_slash.
'">'.$title.' ';
-
}
-
?>
Рис.5 Формирование ЧПУ в файле "menu.php" с использованием GET-параметров
Здесь строках 7÷9 переменным GΕT-параметров $section, $rubric и $page присваиваются значения, полученные из таблицы "url" базы данных MySQL.
Далее, из них получаются (поз.10÷18) новые переменные $section_slash, $rubric_slash и $page_slash, к которым с помощью оператора условия if при непустых значениях добавляется знак слеш "/" (поз.10,13,16). В противном случае присваивается пустая строка "" для переменных $section, $rubric (поз.12,15) и слеш "/" - для $page_slash (поз.18).
Это сделано для того, чтобы в дальнейшем, при формировании ЧПУ-ссылок, упростить использование значений параметров в тегах . При таком преобразовании, при пустых значениях переменных в атрибутах ссылок ничего добавляться не будет. В случае же непустого значения параметра, он будет использован вместе впереди стоящим знаком "/".
А для главной страницы, при всех пустых значениях GΕT-параметров, в ссылках будет использован только знак слеш "/", означающий путь к корневому каталогу и, соответственно, к файлу "index.php".
Ну и в итоге, в строках 19÷21 из полученных переменных происходит формирование ссылок, где в качестве атрибута тега "href" применяется набор ранее полученных переменных $section_slash, $rubric_slash и $page_slash.
Для меню футера следует сделать аналогичные преобразования в файле "ftr_menu.php". Код этого файла мало чем отличается от "menu.php", поэтому повторять здесь его нет необходимости.
На этом мы завершили все предусмотренные в данной части преобразования. Теперь только осталось проверить полученный результат. Для этого откроем страницы сайта и убедимся, что в адресной строке человеко-понятные урлы соответствуют тем значениям GET-параметров, которое были сохранены в базе данных в предыдущей части статьи.

Рис.6 Проверка ЧПУ ссылок на соответствие GET-параметрам
Однако, следует обратить внимание на то, что пункт меню "Статистика угонов", соответствующий 3-ему уровню вложенности страницы с адресом httρ://newsite.local/statyi/ugon-avtomobiley/statistika-ugonov-2016 на данный момент не будет отображать ее активное состояние, как видно на сриншоте.

Рис.7 Отсутствие активного состояния пункта меню со ссылкой УВ3
Это происходит вследствие того, что теперь контроль текущего адреса в файлах "menu.php" и "ftr-menu.php" стал определяться только по наименее значимому GΕT-параметру "page", а не по всему адресу ЧПУ.
Эта проблема будет решена после создания механизм обратного преобразования статических ЧПУ в обычные динамические url и получения соответствующих GET-параметров. Чем мы и буднем заниматься в следующей статье.
Исходные файлы сайта
Исходные файлы сайта с обновлениями, которые были сделаны в данной статье, можно скачать из прилагаемых дополнительных материалов:
- Файлы каталога www
- Таблицы базы данных MySQL
Дополнительные материалы бесплатно предоставляются только зарегистрированным пользователям.
Для скачивания исходных файлов необходимо авторизоваться под своим аккаунтом через соответствующую форму.
Для тех кто не зарегистрирован, можно это сделать на вкладке Регистрация.
С уважением,