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

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

Просмотров: 46553
Дата последнего изменения: 13.11.2023
Роберт Басыров
Сложность урока:
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 на основании шаблонов путей выясняет запрашиваемую страницу и восстанавливает переменные, спрятаные в пути.

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

То есть, набор шаблонов путей

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


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

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