Фильтр со сложной логикой в Битрикс

$arFilter может не только принимать значения свойств элементов ИБ и самих ИБ(наборы для разных Getlist() — отличаются), но и может манипулировать так называемой «Сложной логикой» по средствам «массива вложенного фильтра». Что это такое и как это работает я поясню ниже.

Предположем у Вас стоит задача сделать выборку из ИБ используя метод GetList() класса CIBlockElement. Условия выборки следующие:

  • вывести все элементы у которых свойство PROPERTY_archive_VALUE равняется значению «нет»
  • вывести все элементы у которых свойство PROPERTY_archive_VALUE не заполнено вообще

То есть нам необходимо получить выборку элементов ИБ в которой будут находиться элементы у которых свойство PROPERTY_archive_VALUE равняется значению «нет» или PROPERTY_archive_VALUE не заполнено вообще.

Пример кода:

<?$GLOBALS['arrArc'] = array('ACTIVE' => 'Y',  array("LOGIC" => "OR", array('PROPERTY_archive_VALUE'=>false), array('PROPERTY_archive_VALUE'=>"нет")));?>

Подробнее можно прочитать здесь.

Кастомизация компонента «хлебные крошки» в Битрикс

Чтобы добавить на страницу компонент «хлебные крошки» (bitrix:breadcrumb), необходимо открыть страницу (либо шаблон сайта), затем в визуальном редакторе добавить элемент Служебные→Навигация→Навигационная цепочка.

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

Для этого нужно перейти в режим редактирования и скопировать шаблон компонента в используемый шаблон сайта. Вот примерный код кастомизированного шаблон компонента:

<?
if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
//delayed function must return a string
__IncludeLang(dirname(__FILE__).'/lang/'.LANGUAGE_ID.'/'.basename(__FILE__));
$curPage = $GLOBALS['APPLICATION']->GetCurPage($get_index_page=false);
if ($curPage != SITE_DIR)
{
   if (empty($arResult) || $curPage != $arResult[count($arResult)-1]['LINK'])
      $arResult[] = array('TITLE' =>  htmlspecialcharsback($GLOBALS['APPLICATION']->GetTitle(false, true)), 'LINK' => $curPage);
}
if(empty($arResult))
   return "";
$strReturn = '<div class="Breadcrumbs"><a title="'.GetMessage('BREADCRUMB_MAIN').'" href="'.SITE_DIR.'">Главная</a>';
for($index = 0, $itemSize = count($arResult); $index < $itemSize; $index++)
{
   $strReturn .= ' <span class="Del">&raquo;</span> ';

   $title = htmlspecialcharsex($arResult[$index]["TITLE"]);
   
   if($arResult[$index]["LINK"] <> ""&&$index<(count($arResult)-1))
      $strReturn .= '<a href="'.$arResult[$index]["LINK"].'" title="'.$title.'">'.$title.'</a>';
   else
      $strReturn .= '<span>'.$title.'</span>';
}
$strReturn .= '</div>';
return $strReturn;
?>

Читать далее

Вывод номера элемента с учетом постраничной навигации в Битрикс

Иногда для стандартных компонентов нужно вывести номер элемента с учетом постраничной навигации.

number

Для этого в шаблоне компонента можно использовать следующий код:

Читать далее

Заготовка собственного компонента фильтра в Битрикс

Заготовку можно скачать отсюда.

Собственно не станем вдаваться в то, как этот фильтр будет выглядеть. Рассмотрим механику его работы.

Что должен делать фильтр? Правильно! Фильтровать информацию по различным параметрам.

Схема работы будет следующая:

Сама форма фильтра только отправляет POST запрос с параметрами фильтрации, а компонент вывода — на основе этих параметров выводит именно ту информацию, которая нам требуется.

component.php компонента вывода будет выглядеть примерно так:

Читать далее

Изменить значение пользовательского свойства элемента инфоблока в Битрикс

Реализуется простой функцией:

// $id_el - id элемента, свойство которого будем изменять
// $property_id - id свойства
// $property_value - значение свойства
CIBlockElement::SetPropertyValuesEx($id_el, false, array($property_id => $property_value));

Подробнее о функции