ЧПУ компонентов. Добавление динамических правил
(человеко-понятный URL) из себя представляет набор правил составленных с помощью PERL-совместимых регулярных выражений, они расположены в файле urlrewrite.php корня сайта.
ЧПУ
(человеко-понятный URL) из себя представляет набор правил составленных с помощью PERL-совместимых регулярных выражений (почитать о них), они расположены в файле urlrewrite.php корня сайта.
Примерно такого содержания:
$arUrlRewrite=array ( ... array ( 'CONDITION' => '#^/services/#', 'RULE' => '', 'ID' => 'bitrix:catalog', 'PATH' => '/services/index.php', 'SORT' => 100, ), ... );
При добавлении некого правила в параметры компонента в раздел ЧПУ при сохранении у нас обновляется содержимое файла urlrewrite.php. Правила при этом сортируются по длине строки 'CONDITION' (в данном случае #^/services/#), по принципу чем длиннее правило тем раньше оно добавляется, т.к. предполагается, что оно более детальное. Поэтому стоит создавать правила в единообразной форме.
В процессе перехода на сайта по некому адресу (физически которого не существует!), мы практически сразу попадаем на проверку соответствует ли адрес какому-либо правилу в urlrewrite.php, как только находится соответствие выдается соответствующая страница 'PATH'
Через административную панель можно редактировать правила в разделе Настройки > Настройки продукта > Обработка адресов > Правила
Следует помнить, что в случае самостоятельно редактирования urlrewrite.php сортировка не происходит, условия проверяются в той последовательности в которой они записаны.
Более подробно можно почитать о ЧПУ на сайте перейти
Добавление динамических разделов
У разработчиков часто возникает необходимость в создании динамических разделов, т.е. без существующей физической папки на диске, соответствующей данному разделу. Решить эту проблему можно с помощью следующих методов:
- Через параметры компонента:
Стоит просто добавить в массив параметра "SEF_URL_TEMPLATES", передаваемого компоненту, свои разделы:
$APPLICATION->IncludeComponent( "bitrix:news", "", Array( ... "SEF_URL_TEMPLATES" => Array( "detail"=>"#ELEMENT_ID#/",//соответствует файлу "detail.php" в папке шаблона компонента "news"=>"",//соответствует файлу "news.php" "rss"=>"rss/",//соответствует файлу "rss.php" "my_section"=>"my/" //соответствует файлу "my_section.php", //"my/" - ЧПУ адрес раздела ... ), … ) );
После этого стоит создать файл "my_section.php" в папке шаблона компонента, на который мы будем попадать по примерно такому адресу "http://site.ru/my/".
Следует создать (изменить) в папке шаблона файл ".parameters.php" добавив:
$arTemplateParameters['SEF_MODE']["my_section"] = array( "NAME" => "Мой раздел", "DEFAULT" => "my/", "VARIABLES" => array(), );
Также стоит не забыть добавить уже существующий разделы, т.к. массив $arTemplateParameters['SEF_MODE'] переопределяет существующие значения.
$arTemplateParameters['SEF_MODE']["news"] = array( "NAME" => "News", "DEFAULT" => "news/", "VARIABLES" => array(), ); $arTemplateParameters['SEF_MODE']["section"] = array( "NAME" => "Разделы", "DEFAULT" => "", "VARIABLES" => array("SECTION_ID"), ); и т.д.
-
Через добавление правила ЧПУ
Добавив следующее:
$APPLICATION->IncludeComponent( "bitrix:news", "", Array( ... "SEF_URL_TEMPLATES" => Array( ... "news"=>"news1/|news2/", //соответствует файлу "news.php" ... ), … ) );
Мы будем направляться на файл "news.php" со следующих адресов "http://site.ru/news1/" и "http://site.ru/news2/". А далее уже разбирая адрес динамически менять содержимое страницы.