Создание генератора ссылок

Раньше, когда вы работали только с динамическими URL-адресами, было легко
создавать эти адреса непосредственно в коде приложения, не задумываясь о каком-то
планировании. Но сейчас это уже невозможно. Если вы хотите использовать в своем
Web-сайте URL-адреса с ключевыми словами, то одного правила RewriteRule в файле
.htaccess уже недостаточно! Нужно еще обеспечить, чтобы все ссылки во всем Web-
сайте согласованно использовали эти версии с ключевыми словами. Конечно, мы не
будем рассматривать ручную вставку URL-адресов в Web-сайт: в конце концов, это же
динамический сайт, и при наличии большого количества продуктов в каталоге задача
управления ссылками становится неуправляемой.
К счастью, у этой задачи имеется очень простое решение, которое, сразу после его
реализации, снимает все лишние трудности по управлению ссылками. Предлагаемое
нами решение — это применение функции для генерации новых URL на основе данных,
уже существующих в базе данных, таких как название продукта или категория.
Как уже было сказано, это также улучшает согласованность ссылок.
Пусть, к примеру, у вас есть продукт под названием "Super Drill" (Супер-дрель),
который относится к категории "Tools" (Инструменты). Вы знаете, что идентификатор
продукта равен 9, а идентификатор категории — 5. Нетрудно создать РНР-функ-
цию, которая использует эти данные для генерации ссылки наподобие /Products/
Tools-C5/Super-Drill-P9.html.
В приведенном ниже упражнении вы создадите, а затем используете две РНР-функции.
• _prepare_url_text — принимает в качестве параметра строку для вставки в
усовершенствованный URL (название продукта или категорию) и преобразовывает
ее в форму, которую можно вставить в URL. К примеру, эта функция должна
преобразовывать "Super Drill" в "Super-Drill".
• make_product_url — принимает в качестве параметров название продукта, категорию и их идентификаторы, а затем с помощью вызова _prepare_url_text
генерирует URL наподобие /Products/Tools-C5/Super-Drill-P9 .html.
Если вы приверженец объектно-ориентированного программирования на РНР, то вы можете поместить эти функции в класс. В таком случае функция _ prepare_url_text ()) должна быть оформлена в виде приватного метода, т.к. она нужна только для внутреннего использования, a make_product_url () — в виде общедоступного метода. В этой главе возможности ООП не применяются, чтобы примеры были как можно более простыми и короткими, однако в начале имен функций, которые предназначены только для внутреннего использования,
стоит символ подчеркивания (как в _prepare_url_text()), чтобы облегчить
возможную миграцию в объектно-ориентированный код. В дальнейшем там, где это будет нужно для упражнений, в книге будут использоваться и объектно-ориентированные возможности РНР.