Битрикс. Показ элементов инфоблока по условию

10.07.2018

Теги: CMSGetListWeb-разработкаБитриксИнфоблокСписокЭлементИнфоблока

Задача: на главной странице сайта показывать избранные статьи блога. Для этого в настройках инфоблока «Блог», который предназначен для показа периодических публикаций (новости, статьи, записи блога) добавляем новое свойство «Показывать на главной»:

В настройках свойства инфоблока

  • Показывать на странице редактирования элемента
  • Внешний вид: Флажки
  • Задаем единственное значение Y(es)

Теперь для нескольких публикаций в блоге задаем это свойство:

В итоге получаем такую картину:

Теперь посмотрим на метод CIBlockElement::GetList(), возвращает объект типа CIBlockResult

// Возвращает объект типа CIBlockResult
CIBlockElement::GetList(
    array arOrder = array("SORT"=>"ASC"), // массив полей, по которым будут отсортированы элементы
    array arFilter = array(),             // массив полей, по которым будут отобраны элементы
    mixed arGroupBy = false,              // массив полей для группировки элементов
    mixed arNavStartParams = false,       // параметры для постраничной навигации
    array arSelectFields = array()        // массив возвращаемых полей элементов
)

CIBlockResult — вспомогательный класс для работы с объектами результатов выборок, наследуется от класса CDBResult и содержит все его параметры и методы. Методы класса:

  • GetNext() — Возвращает из выборки список полей элемента, с замененными ссылками в полях DETAIL_PAGE_URL и LIST_PAGE_URL.
  • GetNextElement() — Возвращает объект _CIBElement элемента из выборки.
  • SetUrlTemplates() — Устанавливает шаблоны путей для элементов.
  • SetSectionContext() — Метод устанавливает поля раздела в качестве родителя элемента для подстановки в шаблоны путей.

_CIBElement — вспомогательный класс для работы с объектами, которые возвращает CIBlockResult::GetNextElement(). Для получения различных характеристик элемента рекомендуется использовать именно этот класс. Методы класса

  • GetFields() — Возвращает массив полей элемента, с замененными ссылками в полях DETAIL_PAGE_URL и LIST_PAGE_URL.
  • GetProperties() — Возвращает все или некоторые значения свойств элемента.
  • GetProperty() — Возвращает значения свойства элемента.
  • GetGroups() — Возвращает группы, к которым привязан элемент.

На главной странице сайта добавляем код, который будет показывать избранные статьи:

<?php
CModule::IncludeModule('iblock');
// какие поля получаем
$arSelect = array(
    "ID",
    "IBLOCK_ID",
    "NAME",
    "PREVIEW_TEXT",
    "DETAIL_PAGE_URL",
    "DETAIL_PICTURE"
);
// условия фильтрации
$arFilter = array(
    "IBLOCK_ID" => 1,
    "ACTIVE_DATE" => "Y",
    "ACTIVE" => "Y",
    "PROPERTY_SHOW_MAIN_VALUE" => "Y" // избранные
);
// выполняем запрос к базе данных
$dbResult = CIBlockElement::GetList(
    array('CREATED' => 'DESC'), // сортируем по убыванию даты и времени добавления
    $arFilter,
    false,
    array("nPageSize" => 4),    // получаем четыре статьи
    $arSelect
);
?>

<?php if (!empty($dbResult->arResult)): ?>
    <section class="favorite">
        <?php while ($ob = $dbResult->GetNextElement()): ?>
            <?php $arFields = $ob->GetFields(); /* поля текущего элемента инфоблока */ ?>
            <?php $img = CFile::GetPath($arFields['DETAIL_PICTURE']); ?>
            <article>
                <a href="<?= $arFields['DETAIL_PAGE_URL']; ?>">
                    <img src="<?= $img; ?>" class="img-responsive" alt="<?= $arFields['NAME']; ?>">
                </a>
                <h3><a href="<?= $arFields['DETAIL_PAGE_URL']; ?>"><?= $arFields['NAME']; ?></a></h3>
                <?php
                $preview = $arFields['PREVIEW_TEXT'];
                if (iconv_strlen($arFields['PREVIEW_TEXT']) > 90) {
                    // обрезаем текст анонса до 90 символов
                    $preview = iconv_substr(
                        $arFields['PREVIEW_TEXT'],
                        0,
                        iconv_strpos($arFields['PREVIEW_TEXT'], ' ', 90)
                    );
                    $preview = $preview . '…';
                }
                ?>
                <p><?= $preview; ?></p>
            </article>
        <?php endwhile; ?>
    </section>
<?php endif; ?>

Поиск: CMS • GetList • Web-разработка • Битрикс • Инфоблок • Список • Элемент инфоблока

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.