ЧПУ своими руками (PHP). Динамическое формрование ЧПУ

24 января 2011
Просмотров: 8690Обсудить
Рубрика: Web -> SEO

По просьбе трудящихся, пишу еще одну статью по ЧПУ. В ней я расскажу о подходе, который желательно использовать в высокопосещаемых ресурсах. Эта "желательность" вызвана тем, что динамическое формирование ЧПУ достаточно быстрое, чтоб выдерживать большие нагрузки.

Принцип работы я покажу на примере интернет-магазина товаров.

Начальные данные:

У нас есть табличка (всего одна и очень упрощенная), которая содержит список товаров.

CREATE TABLE product (

  product_id int(11) NOT NULL AUTO_INCREMENT,

  product_name varchar(255) NOT NULL

...

  PRIMARY KEY (product_id);

Нам надо преобразовать урл из /index.php?task=product&id=1 в /product/1/ (ну эт просто), а еще лучше - в /product/nazvanie_producta_1/

Т.е. чтоб в урле было название продукта (в транислите, можно и в кирилице) и ID  продукта.

Для этого мы :

1) в таблицу продуктов добавляем поле "product_link", в которое будем запихивать транслитирацию названия и .. да что угодно туда запихивайте, ункальный код, кусок описания.. ;)

2) При формировании страницы, где будет участвовать наш новый урл (страница категории, например) мы вместе с ID и названием выбираем так-же и product_link. Формирование самого урла происходит по схеме "/{task}/{product_link}_{product_id}/"

3) Для того, чтоб система понимала принцип разбора такого урла надо написать метод, который:

а) По первой части урла (/{task}/) будет выкупать к какому модулю идет запрос

б) По последней части (_{product_id}) выкупить ID продукта и сформировать реальный урл

Надеюсь идея понятна. Чтоб упростить себе жизнь я бы создал 2 функции для преобразования исходного урла в ЧПУ и обратно.

Плюсы данного подхода.

1) Метод реально работает и был неоднократно использован.

2) И формирование и разбор урла происходит очень быстро и не требует много ресурсов (ни коннектов к БД, ничего), поскольку при формирования урла мы все ровно делаем выборку из БД для получения ID и названия товара, а при разборе - имеем элементарные работы со строками.

3) Основную часть урла СЕО-шники могут менять из админки системы, что позволяет гибко работать с таким сайтом.

Минусы:

1) Надо модифицировать таблицы в БД, добавлять дополнительные поля

2) добавлять обработку инфы при сохранении товаров (перевод в транслитерацию)

3) В урле всегда должна присутствовать ID товара

4) Надо писать методы для формирования и разбора урлов

Как видим, по количеству минусов больше, чем плюсов, но по качеству одно только быстродействие решает все! Тем более, что ничего сложного в модификациях нет, это час работы над кодом.

Если у кого остались вопросы - буду рад ответить в коментах

google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru
Метки: ,


Комментариев: 2
Подписаться на комментарии по RSS
  • #12011-01-31 в 19:18:08gamler (анонимно)

    а если (например) название товара поменяется?


  • #22011-01-31 в 20:25:05yaap

    @gamler (анонимно)

    Ну, ссылку-то менять все-ровно не стоит. Иначе ПС вас, за нерабочую старую ссылку и появление дублирующегося контента по новой ссылке, по голове не погладят.

    Тут выход такой.

    Если поменялось название товара, то

    1) Сохраняем старую ссылку в отдельную табличку, в которой будем хранить старые ссылки для 301 редиректа

    2) Генерим новую ссылку ( а точнее только общий кусок {product_link}), пихаем новую ссылку в ту же таблицу для связки со старой

    3) При запросе старой ссылки - делаем 301 редирект на новую, мол, поменялась ссылка.

    Или еще проще. {product_id} у вас в обоих случаях будет одинаков.

    1) Получаем {product_id}

    2) Получаем {product_link} и сравниваем с текущим значением. Если они разные - редирект на новый.

    Но этот вариант потребует дополнительно 1-н запрос в БД (впрочем, как и предыдущий). Впрочем, как и остальные варианты реализации ЧПУ с использованием названий товаров в урлах.


Оставьте комментарий!

Не регистрировать/аноним

Используйте нормальные имена. Ваш комментарий будет опубликован после проверки.

Если вы уже зарегистрированы как комментатор или хотите зарегистрироваться, укажите пароль и свой действующий email.
(При регистрации на указанный адрес придет письмо с кодом активации и ссылкой на ваш персональный аккаунт, где вы сможете изменить свои данные, включая адрес сайта, ник, описание, контакты и т.д.)



grin LOL cheese smile wink smirk rolleyes confused surprised big surprise tongue laugh tongue rolleye tongue wink raspberry blank stare long face ohh grrr gulp oh oh downer red face sick shut eye hmmm mad angry zipper kiss shock cool smile cool smirk cool grin cool hmm cool mad cool cheese vampire snake excaim question

(обязательно)