Иногда, выводить элементы инфоблока с помощью компонентов, может оказаться избыточным. Например, если нужно вывести элементы инфоблока для реализации слайдера в шаблоне. Расскажу как вывести с помощью API Битрикс CIBlockElement::GetList
В большинсве случаев, можно воспользоваться компонентом "Список новостей" и просто сверстать шаблон этого компонента, как того требует дизайн сайта. Слайдеры, списки акций или предложений, преимуществ и прочих, небольших блоков- прорисованных в макете сайта.
Но, что бы листинг шаблона был не очень длинным, если таких вставок достаточно много, эффективнее выводить с помощью API
<?
if (CModule::IncludeModule("iblock")):
$iblock_id = 11; // ID инфоблока из которого выводим элементы
$mySlider = CIBlockElement::GetList (
// Сортировка элементов
Array(
"ID" => "ASC"
),
Array(
"IBLOCK_ID" =>
$iblock_id
),
false,
false,
// Перечисляесм все свойства элементов, которые планируем выводить
Array(
'ID',
'NAME',
'PREVIEW_PICTURE',
'PREVIEW_TEXT',
'PROPERTY_LIN_PR'
)
);
while($arFields = $mySlider->GetNext())
{
//Выводим элемент со всеми свойствами + верстка
$img_path = CFile::GetPath($arFields["PREVIEW_PICTURE"]);
echo '<li><a href="'.$arFields['PROPERTY_LIN_PR_VALUE'].'">';
echo '<h4>'.$arFields['NAME']."</h4>";
echo "<img src='".$img_path."'/>";
echo "<p>".$arFields['PREVIEW_TEXT']."'</p>";
echo '</a></li>';
}
endif;
?>
Если попробуете вывести свойство типа HTML/TEXT получите Array. Для его вывода используйте конструкцию
echo htmlspecialcharsBack($ar_fields['PROPERTY_КОД_СВОЙСТВА_VALUE']["TEXT"]);
Тоже самое с использованием D7
use Bitrix\Main\Loader;
use Bitrix\Iblock\ElementTable;
use Bitrix\Iblock\PropertyTable;
use Bitrix\Main\Entity;
$iblockId = 11; // ID инфоблока из которого выводим элементы
if (Loader::includeModule("iblock")) {
$sliderElements = ElementTable::getList([
'select' => [
'ID',
'NAME',
'PREVIEW_PICTURE',
'PREVIEW_TEXT',
'PROPERTY_LINK_PR' => 'PROPERTY_LINK_PR.VALUE',
],
'filter' => [
'IBLOCK_ID' => $iblockId,
],
'order' => [
'ID' => 'ASC',
],
]);
while ($element = $sliderElements->fetch()) {
var_dump($element); // Все теже поля что и примером выше
}
}
Этот код использует пространство имен Bitrix\Main и классы D7, чтобы получить элементы инфоблока, выбрать необходимые свойства и вывести их данные.
Цитата | ||
---|---|---|
Михаил Базаров пишет:
В общем, собирайте в массив все известные параметры элементов |
А как при этом методе вывести, скажем, 10 последних элементов инфоблока?
Цитата |
---|
Гость написал: Сделал слайдер таким способом. Но возник вопрос: А как при этом методе вывести, скажем, 10 последних элементов инфоблока? |
У CIBlockElement::GetList есть параметры для отбора элементов
nTopCount - ограничить количество сверху.
nOffset - смещение.
nElementID; - ID элемента, который будет выбран вместе со своими соседями.
Подробнее в документации
Код |
---|
'select' => ... // имена полей, которые необходимо получить в результате 'filter' => ... // описание фильтра для WHERE и HAVING 'group' => ... // явное указание полей, по которым нужно группировать результат 'order' => ... // параметры сортировки 'limit' => ... // количество записей 'offset' => ... // смещение для limit 'runtime' => ... // динамически определенные поля |