#codeigniter #friendly-url
#codeigniter #удобный-url
Вопрос:
Я создаю сайт с использованием Codeigniter, и мой URL-адрес для конкретной страницы продукта выглядит такhttp://www.domain.com/products/display /$category_id/$product_id/$offset
$offset используется для ограничения количества страниц, отображаемых на странице при использовании библиотеки разбивки на страницы Codeigniter.
Как я хочу сделать так, чтобы мой URL был чем-то более удобным для человека, например http://www.domain.com /$category_name/$product_name/$offset ie. http://www.domain.com/weapons/proton-canon/3
Кто-нибудь может указать мне общий подход? Я только начал изучать codeigniter и работаю над своим первым проектом
Ответ №1:
Для достижения этой цели вы можете использовать то, что обычно известно как URL slug.
Добавьте в свою таблицу новое поле, называемое «url_slug» или аналогичное. Теперь вам нужно будет создать слаг для каждого продукта и сохранить его в этом поле.
CI имеет функцию в помощнике URL- url_title($string)
, которая принимает строку и преобразует ее для использования в URL-адресах.
Например, My product name
стало бы my_product_name
.
Теперь, в вашем методе, вы можете либо — сохранить product_id
нетронутым, использовать это в качестве параметра для вашего метода, чтобы показывать конкретные продукты, и использовать slug для ссылок, удобных для пользователя, либо вы можете просто использовать url_slug
для ссылки на продукты.
Ваш URL может выглядеть как:
www.domain.com/$category_name/$product_id/my_cool_product/$offset
или это может выглядеть как
www.domain.com/$category_name/my_cool_product/$offset
без идентификатора. выбор за вами, но url_slug может измениться — идентификатор не изменится. Что может повлиять на SEO.
В любом случае, ваш метод должен выглядеть примерно так:
function display_product($product_id, $url_slug, $offset) {
// do what you gotta do...
}
Затем вы можете использовать URL-адреса, подобные приведенным выше.
Вам также нужно будет использовать маршрутизацию URI, поскольку в приведенном выше примере будет предпринята попытка поиска вызываемого контроллера $category_name
и вызываемого метода my_cool_product
, которые, конечно же, не будут существовать.
Смотрите Маршрутизацию URI для получения дополнительной информации.