Генерация ЧПУ в комплексном компоненте | REDs group
REDS Group
ул. Большая Академическая, дом 5, стр. 1, Москва.
Генерация ЧПУ в комплексном компоненте

Генерация ЧПУ в комплексном компоненте

161

В комплексные компоненты встроена функция генерации ЧПУ. У этих компонентов всегда есть входной параметр SEF_MODE, который может принимать значения Y и N. Если параметр SEF_MODE равен N, то компонент работает с физическими ссылками и все параметры передает через стандартные параметры HTTP запроса. Например:

/fld/cat.php?IBLOCK_ID=12&SECTION_ID=371

Если параметр SEF_MODE равен Y, то компонент генерирует и обрабатывает ссылки на основании шаблонов. Например, он может понять и обработать ссылку:

/catalog/section/371.php?IBLOCK_ID=12, даже если сам он лежит в файле /fld/cat.php.

Если параметр SEF_MODE равен Y, то у компонента должен так же присутствовать параметр SEF_FOLDER, который должен содержать путь до папки, с которой работает компонент. Этот путь может как совпадать с физическим путем, так и не совпадать. Например, в компоненте bitrix:catalog, подключенном в файле /fld/cat.php, могут быть установлены параметры SEF_MODE = Y и SEF_FOLDER=/catalog/. Тогда компонент будет отвечать на запросы по пути /catalog/.... По умолчанию редактор должен устанавливать текущий физический путь к редактируемому файлу.

У комплексного компонента, который может работать в режиме SEF, должен быть определен набор шаблонов путей по умолчанию. Например, в комплексном компоненте bitrix:catalog может быть определен следующий массив:

$arDefaultUrlTemplatesSEF = array(
      "list" => "index.php",
      "section" => "section.php?IBLOCK_ID=#IBLOCK_ID#&SECTION_ID=#SECTION_ID#",
      "element" => "element.php?ELEMENT_ID=#ELEMENT_ID#"
  );

Эти шаблоны путей могут быть переопределены с помощью входного параметра комплексного компонента SEF_URL_TEMPLATES, содержащего новый массив всех шаблонов путей или их части.

При сохранении страницы с компонентом, работающим в SEF режиме, в редакторе создается или обновляется запись в системе urlrewrite. Например, при сохранении файла /fld/cat.php, в котором лежит компонент bitrix:catalog, переключенный в SEF режиме с параметром SEF_FOLDER=/catalog/, в системе urlrewrite создается или обновляется запись типа:

array(
 "CONDITION" => "#^/catalog/#", 
 "ID" => "bitrix:catalog",
 "PATH" => "/fld/cat.php" 
  ),
  • в CONDITION записывается значение параметра SEF_FOLDER, обрамленное символами «#^» и «#»
  • в ID записывается название компонента
  • в PATH записывается физический путь к файлу, который сохраняется

Если запись с таким PATH и ID уже есть, то она обновляется, если нет – добавляется.

В run-time при запросе физически не существующей страницы механизм urlrewrite производит поиск соответствующей записи по CONDITION и передает управление на страницу PATH.

Компонент на странице PATH на основании шаблонов путей выясняет запрашиваемую страницу и восстанавливает переменные, спрятаные в пути.

ВАЖНО! Обязательное требование к набору шаблонов путей данного компонента - это уникальность каждого шаблона пути без учета параметров и переменных. Это должно проверяться при сохранении страницы в визуальном редакторе.

Такой набор шаблонов путей является допустимым:

"section" => "section/#SECTION_ID#.php?IBLOCK_ID=#IBLOCK_ID#", 
"element" => "element/#ELEMENT_ID#.php"

А такой допустимым не является:

"section" => "#SECTION_ID#.php?IBLOCK_ID=#IBLOCK_ID#",
"element" => "#ELEMENT_ID#.php"

**Материалы взяты c сайта 1С-Битрикс**

25.05.2018 / Садовиков Сергей
Комментарии (0)