Битрикс смарт фильтр по наличию товаров

03.06.2018  10:21

Возникла задача в стандартный битриксовский catalog.smart.filter добавить галочку «в наличии». Ну что, костылим шаблон смарт фильтра, HTML-код галочки:
 value="Y" id="catalog_available" /> 

А т.к. по-простому дополнительные данные не всегда можно передать в $_POST/$_GET то чукотский трюк: запишем данные в $_COOKIE
		$(document).ready(function(){
			$("#catalog_available").change(function(e){
				if($(this).is(":checked")){
					// window.location.href = '?HIDE_NOT_AVAILABLE=Y';
					$.cookie("hide_not_available","Y");
				}
			});

Если используется комплексный компонент каталога, то в section.php перед подключением
$APPLICATION->IncludeComponent(
"bitrix:catalog.section",
$template,
Array()
);
Добавляем: if($_REQUEST["HIDE_NOT_AVAILABLE"]=="Y" || $_COOKIE["hide_not_available"]=="Y") $arParams["HIDE_NOT_AVAILABLE"] = "Y";

Вариант сложнее — сделаем фильтрацию по количеству товаров, допустим у нас 4 варианта:
В наличии >=10 штук
Под заказ 1 штука
Уточняйте наличие у менеджеров 2-9 штук
Временно отсутствует 0

В шаблоне фильтра так:
		$(document).ready(function(){
			$("#catalog_available li").click(function(e){
				$("#smartFilterDropDown1111").hide();
				// $(this).closest(".bx_filter_select_block").hide();
				$("#catalog_available_title").html($(this).text());
				$("#catalog_available label").removeClass("selected");
				$(this).find("label").addClass("selected");
				$.cookie("available_count",$(this).data("item"));
				//alert($(this).data("item"));
			});
		});

В section.php чуть хитрее, чем просто флаг HIDE_NOT_AVAILABLE, а arrFilter CATALOG_QUANTITY:
				global $arrFilter;
				if ($available_count == 1) {
				$arrFilter[] = Array(
					'>CATALOG_QUANTITY' => '9',
				);
				}
				if ($available_count == 2) {
				$arrFilter[] = Array(
					'=CATALOG_QUANTITY' => '1',
				);
				}
				if ($available_count == 3) {
				$arrFilter[] = Array(
					'>CATALOG_QUANTITY' => '1',
					' '10',
					'LOGIC' => 'AND',
				);
				}
				if ($available_count == 4) {
				$arrFilter[] = Array(
					' '1',
				);
				}


Решение вполне себе универсальное и таким кандебобером в фильтр можно добавить вообще любые параметры товаров и любые условия фильтрации.


перейти в Блог

Ударим лайками по бездорожью, разгильдяйству и бюрократизму!


Ключевые слова (тэги): 1С-Битрикс 36  PHP 47  web-программирование 71  

Вам есть что сказать — ну я же чую.
Высказаться о наболевшем, я выслушаю:
Имя


email (не публикуется)