ЧПУ компонентов. Добавление динамических правил

ЧПУ компонентов. Добавление динамических правил

ЧПУ

(человеко-понятный 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 сортировка не происходит, условия проверяются в той последовательности в которой они записаны.

Более подробно можно почитать о ЧПУ на сайте перейти

Добавление динамических разделов

У разработчиков часто возникает необходимость в создании динамических разделов, т.е. без существующей физической папки на диске, соответствующей данному разделу. Решить эту проблему можно с помощью следующих методов:

  1. Через параметры компонента:

    Стоит просто добавить в массив параметра "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"),
    );
     и т.д.
    

  2. Через добавление правила ЧПУ

    Добавив следующее:

    
    $APPLICATION->IncludeComponent(
    	"bitrix:news",
    	"",
    	Array(
    		...
    		"SEF_URL_TEMPLATES" => Array(
    			...
    			"news"=>"news1/|news2/",	//соответствует файлу "news.php"
    			...
    		),
    		…
    	)		
    );
    

    Мы будем направляться на файл "news.php" со следующих адресов "http://site.ru/news1/" и "http://site.ru/news2/". А далее уже разбирая адрес динамически менять содержимое страницы.



Возврат к списку

На верх