В комплексные компоненты встроена функция генерации ЧПУ. У этих компонентов всегда есть входной параметр SEF_MODE, который может принимать значения Y и N. Если параметр SEF_MODE равен N, то компонент работает с физическими ссылками и все параметры передает через стандартные параметры HTTP запроса. Например:
Если параметр SEF_MODE равен Y, то компонент генерирует и обрабатывает ссылки на основании шаблонов. Например, он может понять и обработать ссылку:
Если параметр 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" ),
Если запись с таким 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С-Битрикс**