Решение внедрить раздел из HL-блока (Highload) зачастую оправдано для как раз для высоконагруженных проектов. Или если просто Вы помешаны на высокой скорости работы своего проекта как и мы =)
Собственно решение будет элементарным - мы не стали его оборовачивать в свой компонент с шаблоном и собственным пространством имен, а просто обошлись... 50 строчками кода в index.php директории раздела.
Итак, приступим. Для начала как всегда - шапка страницы и всё, что будет необходимо для работы:
Дальше Вы уже можете перебрать его в верстку как обычный массив по своему вкусу и добавить щепотку CSS. А теперь о самом вкусном - как же сделать так, чтобы каждый HL был отдельной страницей, на которой возможно вывести описание и прочую полезную инфу? Элементарно - используем файл urlrewrite.php (далее код приводится на примере нашей страницы Модули для CMS 1С-Битрикс)
Надеемся что данная статья поможет Вам сделать Ваш сайт в разы быстрее!
Собственно решение будет элементарным - мы не стали его оборовачивать в свой компонент с шаблоном и собственным пространством имен, а просто обошлись... 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 =) Надеемся что данная статья поможет Вам сделать Ваш сайт в разы быстрее!