Просмотров: 20448 (Статистика ведётся с 06.02.2017)

Допустим, что у нас имеется каталог Книги, который мы хотим опубликовать. Для его публикации мы будем использовать комплексный компонент Каталог (bitrix:catalog) в связке с компонентом Умный фильтр (bitrix:catalog.smart.filter). Поэтому предварительно следует настроить отображение необходимых свойств в умном фильтре. В нашем случае только Год выпуска и Автор(ы) будут отображаться в фильтре:

Создаем новую страницу и размещаем на ней компонент Каталог. В основных параметрах компонента указываем наш инфоблок Книги. В параметре Тип цены (секция Цены) выбираем Базовая цена. Чтобы легче было проверить работу фильтра, в настройках списка элементов отмечаем для отображения свойства Год выпуска и Автор(ы). Все остальные параметры настройте необходимым для вас образом (детальное описание каждого параметра компонента смотрите в документации по продукту).

Каталог книги опубликован. Если мы перейдем в некоторый раздел каталога, то увидим, что используется обычный встроенный в компонент фильтр. Заменим этот фильтр на умный фильтр.

Для этого со страницы просмотра некоторого раздела каталога выполняем копирование шаблона компонента Каталог: сразу применяем новый шаблон и переходим к его редактированию (файл /bitrix/templates/<шаблон_сайта>/components/bitrix/catalog/<шаблон_компонента>/section.php):

  • удаляем код вызова обычного фильтра:
    <?$APPLICATION->IncludeComponent(
    	"bitrix:catalog.filter",
    	"",
    	Array(
    		"IBLOCK_TYPE" => $arParams["IBLOCK_TYPE"],
    		...
    		"CACHE_GROUPS" => $arParams["CACHE_GROUPS"],
    	),
    	$component
    );
    ?>
    
  • в самое начало файла добавляем следующий код для работы умного фильтра:
    <?
    if (CModule::IncludeModule("iblock"))
    {
    	$arFilter = array(
    		"ACTIVE" => "Y",
    		"GLOBAL_ACTIVE" => "Y",
    		"IBLOCK_ID" => $arParams["IBLOCK_ID"],
    	);
    	if(strlen($arResult["VARIABLES"]["SECTION_CODE"])>0)
    	{
    		$arFilter["CODE"] = $arResult["VARIABLES"]["SECTION_CODE"];
    	}
    	elseif($arResult["VARIABLES"]["SECTION_ID"]>0)
    	{
    		$arFilter["ID"] = $arResult["VARIABLES"]["SECTION_ID"];
    	}
    		
    	$obCache = new CPHPCache;
    	if($obCache->InitCache(36000, serialize($arFilter), "/iblock/catalog"))
    	{
    		$arCurSection = $obCache->GetVars();
    	}
    	else
    	{
    		$arCurSection = array();
    		$dbRes = CIBlockSection::GetList(array(), $arFilter, false, array("ID"));
    		$dbRes = new CIBlockResult($dbRes);
    
    		if(defined("BX_COMP_MANAGED_CACHE"))
    		{
    			global $CACHE_MANAGER;
    			$CACHE_MANAGER->StartTagCache("/iblock/catalog");
    
    			if ($arCurSection = $dbRes->GetNext())
    			{
    				$CACHE_MANAGER->RegisterTag("iblock_id_".$arParams["IBLOCK_ID"]);
    			}
    			$CACHE_MANAGER->EndTagCache();
    		}
    		else
    		{
    			if(!$arCurSection = $dbRes->GetNext())
    				$arCurSection = array();
    		}
    
    		$obCache->EndDataCache($arCurSection);
    	}
    	?>
    	<?$APPLICATION->IncludeComponent(
    		"bitrix:catalog.smart.filter",
    		"",
    		Array(
    			"IBLOCK_TYPE" => $arParams["IBLOCK_TYPE"],
    			"IBLOCK_ID" => $arParams["IBLOCK_ID"],
    			"SECTION_ID" => $arCurSection["ID"],
    			"FILTER_NAME" => "arrFilter",
    			"PRICE_CODE" => $arParams["PRICE_CODE"],
    			"CACHE_TYPE" => "A",
    			"CACHE_TIME" => "36000000",
    			"CACHE_NOTES" => "",
    			"CACHE_GROUPS" => "Y",
    			"SAVE_IN_SESSION" => "N"
    		),
    		false
    	);?>
    <?
    }
    ?>
    
    Обратите внимание, что в фильтре будут отображаться типы цен, выбранные при настройке компонента Каталог (см. параметр "PRICE_CODE). В нашем же случае будет отображаться только базовая цена (см. настройки компонента выше).
  • Сохраняем внесенные изменения.

В результате страница просмотра раздела каталога имеет следующий вид:

Фильтр отображается в соответствии с выбранными нами свойствами и типом цен.

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

  • Скопируйте шаблон компонента Умный фильтр:

    В форме копирования шаблона отметьте опцию Применить новый шаблон компонента. В этом случае автоматически подставится название нового шаблона в коде вызова компонента в файле /bitrix/templates/<шаблон_сайта>/components/bitrix/catalog/<шаблон_компонента>/section.php (см. код выше).

    Важно! Если копирование компонента Умный фильтр выполняется вручную, то затем необходимо будет самостоятельно подставить название нового шаблона в коде вызова компонента фильтра в компоненте каталога:
    ...
    <?$APPLICATION->IncludeComponent("bitrix:catalog.smart.filter", "<новый_шаблон>", Array(
    	"IBLOCK_TYPE" => $arParams["IBLOCK_TYPE"],
    	...
    

    Кроме того, в форме копирования шаблона отметьте опцию Перейти к редактированию шаблона, чтобы сразу был осуществлен переход к редактированию шаблона компонента.
  • Добавьте следующий код в шаблон компонента Умный фильтр:
    <?$this->SetViewTarget("right_area");?>
    
    перед
    <form name="<?echo $arResult["FILTER_NAME"]."_form"?>"
    ...
    
    и в конце после
    ...
    </form>"
    
    добавьте
    <?$this->EndViewTarget("right_area");?>
    
    И сохраните внесенные данные.
  • Перейдите к редактированию включаемой области страницы, на которой размещен компонент Каталог, и добавьте следующий код:
    <div class="sidebar pright">
       <?$APPLICATION->ShowViewContent("right_area")?>
    </div>
    

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

32


Курсы разработаны в компании «1С-Битрикс»