Генерация раздела из Highload

Как из одного блока HL (Highload) сгенерировать целый раздел на сайте с навигацией по ЧПУ
Решение внедрить раздел из HL-блока (Highload) зачастую оправдано для как раз для высоконагруженных проектов. Или если просто Вы помешаны на высокой скорости работы своего проекта как и мы =)
Собственно решение будет элементарным - мы не стали его оборовачивать в свой компонент с шаблоном и собственным пространством имен, а просто обошлись... 50 строчками кода в index.php директории раздела.
Итак, приступим. Для начала как всегда - шапка страницы и всё, что будет необходимо для работы:
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
$APPLICATION->SetTitle("Модули CMS 1С-Битрикс");
$APPLICATION->AddChainItem("Модули CMS 1С-Битрикс", "/moduli-cms-1s-bitriks/");
use Bitrix\Main\Loader; 

Loader::includeModule("highloadblock"); 
use Bitrix\Highloadblock as HL;
use Bitrix\Main\Entity;
Дальше делаются все необходимые выборки
$hlblock_id = 1;
$elemCode = $_REQUEST['CODE'];	//переменная, в которой живет XML_ID нашей записи HL 
	$hlblock = HL\HighloadBlockTable::getById($hlblock_id)->fetch();
	$entity = HL\HighloadBlockTable::compileEntity($hlblock);
	$main_query = new Entity\Query($entity);
	$main_query->setSelect(array('*'));	//выбираем ВСЕ доступные поля элемента highloadblock
	$main_query->setFilter(array("UF_XML_ID" => $elemCode));

	$result = $main_query->exec();
	$result = new CDBResult($result);
	$resCount = $result->SelectedRowsCount();	//количество выбранных элементов. В данном примере - 1, используется для проверки на корректность выборки

	if($resCount>0 && !empty($elemCode) && isset($elemCode)){
		if($arResult = $result->Fetch()){
			$rsFile = CFile::GetByID($arResult["UF_FILE"]);	//добавленное свойство типа "ФАЙЛ"
			$arFile = $rsFile->Fetch();
			//pre($arFile);
			$arResult['DETAIL_PICTURE'] = $arFile;
			$arResult['DETAIL_PICTURE']['SRC'] = CFile::GetPath($arResult["UF_FILE"]);	//добавленное свойство типа "ФАЙЛ" - адрес на сервере
		}
	}
Всё, с этого момента у нас есть прекрасный массив $arResult со всеми полями единичной записи HL
Дальше Вы уже можете перебрать его в верстку как обычный массив по своему вкусу и добавить щепотку CSS. А теперь о самом вкусном - как же сделать так, чтобы каждый HL был отдельной страницей, на которой возможно вывести описание и прочую полезную инфу? Элементарно - используем файл urlrewrite.php (далее код приводится на примере нашей страницы Модули для CMS 1С-Битрикс)
$arUrlRewrite=array (
  5 => 
  array (
    'CONDITION' => '#^/moduli-cms-1s-bitriks/(\\S*)/(\\?*)(\\S*)#',
    'RULE' => 'CODE=$1',
    'ID' => '',
    'PATH' => '/moduli-cms-1s-bitriks/index.php',
    'SORT' => 100,
  ),
);
Теперь при открытии по данному адресу, всё что после moduli-cms-1s-bitriks/ будет являться заветной переменной CODE для выборки элемента highload =)
Надеемся что данная статья поможет Вам сделать Ваш сайт в разы быстрее!

Разработка. Модуль Highload