Создание компонента Битрикс для вывода списка элементов инфоблока

Создание структуры компонента

Сначала создадим структуру компонента. Создайте папку для вашего компонента в директории local/components/ваш_модуль/ваш_компонент/.

Настройка параметров компонента

Создайте файл /.parameters.php в папке компонента и добавьте следующий код:

<?php
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) die();

$arComponentParameters = array(
    "PARAMETERS" => array(
        "USE_CACHE" => array(
            "PARENT" => "BASE",
            "NAME" => GetMessage("USE_CACHE"),
            "TYPE" => "CHECKBOX",
            "DEFAULT" => "Y",
        ),
        "CACHE_TIME" => array(
            "PARENT" => "BASE",
            "NAME" => GetMessage("CACHE_TIME"),
            "TYPE" => "STRING",
            "DEFAULT" => 3600,
            "ADDITIONAL_VALUES" => "Y",
            "VISIBLE" => $arCurrentValues["USE_CACHE"] == "Y",
        ),
    ),
);

Этот код добавляет параметры USE_CACHE и CACHE_TIME в настройки компонента.

Настройка класса компонента

Измените метод onPrepareComponentParams в файле class.php:

<?php
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) die();

class YourComponentName extends CBitrixComponent
{
    public function onPrepareComponentParams($arParams)
    {
        $arParams['USE_CACHE'] = $arParams['USE_CACHE'] === 'N' ? 'N' : 'Y';
        $arParams['CACHE_TIME'] = $arParams['USE_CACHE'] === 'Y' ? (intval($arParams['CACHE_TIME']) > 0 ? intval($arParams['CACHE_TIME']) : 3600) : 0;
        return $arParams;
    }

    public function executeComponent()
    {
        if ($this->arParams['USE_CACHE'] === 'Y' && $this->startResultCache()) {
            $arFilter = array('IBLOCK_ID' => 1, 'ACTIVE' => 'Y');
            $arSelect = array('ID', 'NAME', 'PREVIEW_TEXT');

            $nav = new \Bitrix\Main\UI\PageNavigation("nav");
            $nav->allowAllRecords(true)->setPageSize(10)->initFromUri();

            $rsNews = CIBlockElement::GetList(array(), $arFilter, false, array("nPageSize" => $nav->getPageSize(), "iNumPage" => $nav->getCurrentPage()), $arSelect);
            $nav->setRecordCount($rsNews->NavRecordCount);
            $this->arResult['NAV'] = $nav;

            $arResult['NEWS'] = array();
            while ($arNews = $rsNews->GetNext()) {
                $arResult['NEWS'][] = $arNews;
            }

            $this->arResult = $arResult;
            $this->includeComponentTemplate();
        }
        else {
            $this->AbortResultCache();
        }
    }
}

Настройка вывода данных в шаблоне

Измените template.php:

Этот код добавляет вывод сообщения, если данных нет.

Заключение

Теперь у вас есть гибкий компонент для вывода списка элементов инфоблока с пагинацией, кешированием и возможностью настройки времени кеширования прямо из параметров компонента. При необходимости вы можете легко настраивать его поведение через административный интерфейс Битрикса.

 

Коментарии

Коментарии отсутствуют, будьте первым(ой) кто напишет под этим постом!

Написать коментарий