ALite CMS 43.11
О системе > Разработка > Статьи
Язык: 
ALite CMS

Статьи

Использование ЧПУ в ALite CMS

03.04.2009 15:51, рейтинг: 2638, автор: ALite CMS

Человекопонятные УРЛ (далее ЧПУ) не является на данный момент чем-то предопределенным. Сама по себе идея ЧПУ проста и понятна – сделать адреса, отображаемые в браузерах, читабельными, легко запоминающимися и легко набираемыми на клавиатуре. Сейчас много пишут о более качественном индексировании ЧПУ поисковыми системами по сравнению с «классическими» адресами, но это очень спорно. В этой статье описаны реализация и использование ЧПУ в ALite CMS.

При реализации ЧПУ в ALite CMS не используется транслитерация заголовков. Вряд ли можно признать «человекопонятным» адреса вида http: // mysite.com / novosty_moego_lubimogo_sayta / poslednie_novosti_segodnyachnego_dnya.html. К тому же в заголовках могут быть знаки препинания, пробелы, мнемоники и другие символы, запрещенные для использования в адресах. Хотя это и можно обойти, используя всевозможные преобразования запрещенных символов, но исполняемый код скриптов при этом становиться слишком искусственным и возрастает вероятность ошибок при кодировании/декодировании адресов.

В ALite CMS вместо транслитерации заголовков используется специальное поле «ЧПУ» и идентификатор строки. Если поле «ЧПУ» заполнено при формировании реального адреса будет использоваться значение поля «ЧПУ», если не заполнено – будет использоваться идентификатор строки. Значение поля «ЧПУ» имеет ряд ограничений: оно должно быть уникальным, не может быть числом, не должно содержать специальные символы, знаки препинания и пробелы. Контроль значения поля «ЧПУ» выполняется при попытке записи строки.

ЧПУ в ALite CMS имеют следующую предопределенную структуру: http: // имя_хоста / раздел_сайта / тип_модуля / элемент_модуля / страница_листинга / дополнительный_параметр /. Такой подход имеет свои положительные и отрицательные стороны. Положительная стороны в том, что это позволяет упростить формирование адреса и снизить вероятность ошибки при его обработке. Отрицательная сторона в том, что иногда требуется передавать лишние параметры не нужные для отображения конкретной страницы. Например, чтобы перейти в новости, расположенные на главной странице, придется создать примерно такой адрес: http: // имя_хоста / home / news /. Хотя для перехода на главную страницу не требуется указывать параметр «раздел_сайта», но параметр «тип_модуля» должен быть расположен вторым по счету и поэтому необходимо указать параметр «раздел_сайта». Т.е. для передачи значащего параметра должны быть явно заданы все предшествующие ему параметры. Последующие необязательные параметры, расположенные за последним значащим параметром, можно не указывать.

Собственно формируемыми параметрами являются:
1. «раздел_сайта» (соответствует параметру «rid» «классического» адреса) - «ЧПУ» или идентификатор текущего раздела. Если текущий раздел не выбран, но отображен, параметр «раздел_сайта» будет иметь значение «home».
2. «тип_модуля» (соответствует параметру «elm» «классического» адреса) - «ЧПУ» или идентификатор текущего модуля. За каждым разделом сайта можно закрепить несколько разных модулей. При указании параметра «тип_модуля» будут выводиться данные только выбранного модуля.
3. «элемент_модуля» (соответствует параметру «elmid» «классического» адреса) - «ЧПУ» или идентификатор текущего элемента текущего модуля. При указании параметра «элемент_модуля» будут выводиться данные выбранного элемента выбранного модуля.
4. «страница_листинга» (соответствует параметру «page» «классического» адреса) - номер текущей страницы при выводе списков.
5. «дополнительный_параметр» (не имеет прямого соответствия в «классическом» адресе) – любой набор параметров, обработка которых определяется пользователем. Например, через него передается параметр «ulogout» при выходе пользователя из авторизированного режима.

Примеры:

1. Адрес элемента новостей (id=42, «ЧПУ»=’football’) из раздела с id=14 и «ЧПУ»=’sport’.
    Классический - http://www.alite-cms.ru/ru/?elm=news&elmid=42&rid=14
    ЧПУ - http://www.alite-cms.ru/ru/sport/news/football/
2. Адрес элемента статей (id=3, «ЧПУ»=’’) из раздела с id=25 и «ЧПУ»=’’.
    Классический - http://www.alite-cms.ru/ru/?elm=articles&elmid=3&rid=25
    ЧПУ - http://www.alite-cms.ru/ru/25/articles/3/


В ALite CMS используется универсальная обработка адресов. Это означает, что как «классические» адреса, так и ЧПУ всегда ведут на одну и ту же страницу независимо от того включено или нет использование ЧПУ.

Примечания:
1. Чтобы использовать ЧПУ необходимо разрешить использование файлов .htaccess и в нем должны присутствовать следующие строки (в дистрибутиве эти строки уже существуют):
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php [L,QSA]
2. Для обеспечения обратной совместимости рекомендуется внутри скриптов использовать адреса в классическом виде.
3. На конкретном сайте рекомендуется сразу определить какой вид адресации будет использоваться и не менять его в будущем для предотвращения возможных ошибок индексации поисковыми системами.
4. Сформированный ЧПУ не должен указывать на реально существующие физические пути. Например, если реально существует папка / my_domen / catalog /, то URL http: // my_domen / catalog / не будет обработан как ЧПУ, а вызовет переход в папку / my_domen / catalog /.
5. Для обработки данных, непосредственно передаваемых браузеру методом GET (например, при выполнении php-функции header('Location: ...')) или для использования в JavaScript, существует отдельная функция преобразования alc_common_url_to_furl. Преобразование следует выполнять до отправки данных браузеру. Для правильной обработки языкового префикса это преобразование необходимо вызывать независимо от использования ЧПУ.
6. Языковой префикс в урл'ах не требует дополнительной обработки и удаляется из php-переменной REQUEST_URI до начала выполнения скриптов !!!
7. Языковой префикс не добавляется, если урл начинается с указания типа протокола (http://, https://, ftp://, ftps://) или дополнения типа mailto, skype, tel и т.п. Такие урл'ы остаются без изменений.

Пример:
...
$href = '/?elm=articles';
if ($rid > 0) $href .= '&rid='.$rid;
if ($friendly_urls) $href = alc_common_url_to_furl($href);
//проверка использования или не использования ЧПУ
//производится непосредственно в функции преобразования url_to_furl

$href = alc_common_url_to_furl($href);
header('Location: '.$href);
...
Комментарий:
$friendly_urls - предопределенная в ALite CMS глобальная переменная
$friendly_urls == true; ЧПУ используются
$friendly_urls == false; ЧПУ не используются

Теги: #Чпу
RSS  RSS