298  /  381
Справочник

Комплексный компонент и SEF режим

Просмотров: 40404
Дата последнего изменения: 27.05.2021
Роберт Басыров
Сложность урока:
3 уровень - средняя сложность. Необходимо внимание и немного подумать.
1
2
3
4
5
Недоступно в лицензиях:
Ограничений нет

В комплексные компоненты встроена функция генерации ЧПУ. У этих компонентов всегда есть входной параметр 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"

допустимым не является.

Список ссылок по теме:


Курсы разработаны в компании «1С-Битрикс»

Если вы нашли неточность в тексте, непонятное объяснение, пожалуйста, сообщите нам об этом в комментариях.
Развернуть комментарии