Вывести все товары, с постраничной навигацией, из всех разделов инфоблока

Просмотров: 33606

По сути, эта заметка, небольшой лайфхак. Достаточно часто нужно, в корне каталога, в ТОП-е товаров вывести все товары всех разделов инфоблока, с постраничной навигацией. Да, и еще навесить умный фильтр над этим делом. Все очень просто- рассказываю

Catalog.section вместо catalog.top

Для начала, просто смотрим на шаблон комплексного компонента каталог, и понимаем, что все что нам нужно уже есть в section.php. Там выводится компонент catalog.section. и умный фильтр с ним работает. да и постраничная навигация там уже есть. Делать все тоже самое для catalog.top, который выводится в sections.php, трудоемко- придется кастомизировать компонент ТОП-а

Единственное чего не хватает в catalog.section это выводить товары "не зная раздела"- то есть он выводит товары (элементы точнее) только из заведомо известного раздела....или нет? )

Копируем catalog.section из section.php в sections.php, просто как есть. Catalog.top можете оставить, по желанию- выведете туда пару тройку товаров с иным оформлением (ТОП же).

У catalog.section находим строчку

"SHOW_ALL_WO_SECTION" => "N",

И меняем N на Y. SHOW_ALL_WO_SECTION - это не документированный параметр, который отвечает за вывод элементов инфоблока без привязки к разделам, точнее: если раздел не известен- выводит все подряд

У самого же catalog.section уже есть и постраничная навигация, и над ним можно навесить умный фильтр

В следующей записке, расскажу как вывести Умный фильтр на главную, что бы он давал выбрать параметры товаров и отправлял в каталог, эта записка нам понадобится.

Михаил Базаров 14.08.2016
Цитата
Владимир Мороз написал:
Здравствуйте, Михаил! Спасибо за статью. Как раз появилась задача вывести умный фильтр на странице производителя со списком товаров. Ранее выводился просто catalog.top.
Переделал на сatalog.section. Перед вызовом сatalog.section вставил bitrix:catalog.smart.filter, но умный фильтр не работает (выводятся только кнопки "Показать" и "Сбросить" ).
Не могли бы вы подсказать как заставить умный фильтр работать?

Код
Код
 <?$APPLICATION->IncludeComponent(
            "bitrix:catalog.smart.filter",
            "",
            array(
                
"IBLOCK_TYPE" => $arParams["IBLOCK_TYPE"],
                "IBLOCK_ID" => $arParams["IBLOCK_ID"],
                "SECTION_ID" => $arCurSection['ID'],
                "FILTER_NAME" => $arParams["FILTER_NAME"],
                "PRICE_CODE" => $arParams["PRICE_CODE"],
                "CACHE_TYPE" => $arParams["CACHE_TYPE"],
                "CACHE_TIME" => $arParams["CACHE_TIME"],
                "CACHE_GROUPS" => $arParams["CACHE_GROUPS"],
                "DISPLAY_ELEMENT_COUNT" => "Y",
                "SAVE_IN_SESSION" => "N",
                "FILTER_VIEW_MODE" => $arParams["FILTER_VIEW_MODE"],
                "XML_EXPORT" => "Y",
                "SECTION_TITLE" => "NAME",
                "SECTION_DESCRIPTION" => "DESCRIPTION",
                'HIDE_NOT_AVAILABLE' => $arParams["HIDE_NOT_AVAILABLE"],
                "TEMPLATE_THEME" => $arParams["TEMPLATE_THEME"],
                'CONVERT_CURRENCY' => $arParams['CONVERT_CURRENCY'],
                'CURRENCY_ID' => $arParams['CURRENCY_ID'],
                "SEF_MODE" => $arParams["SEF_MODE"],
                "SEF_RULE" => $arResult["FOLDER"].$arResult["URL_TEMPLATES"]["smart_filter"],
                "SMART_FILTER_PATH" => $arResult["VARIABLES"]["SMART_FILTER_PATH"],
                "PAGER_PARAMS_NAME" => $arParams["PAGER_PARAMS_NAME"],
            ),
            $component,
            array('HIDE_ICONS' => 'Y')
        );?>



 
Думаю, ошибка у вас в настройках фильтра. Вы передаете не понятные ему параметры в
Код
"IBLOCK_ID" => $arParams["IBLOCK_ID"],
                "SECTION_ID" => $arCurSection['ID'],
                "FILTER_NAME" => $arParams["FILTER_NAME"],
                "PRICE_CODE" => $arParams["PRICE_CODE"],
                "CACHE_TYPE" => $arParams["CACHE_TYPE"],
                "CACHE_TIME" => $arParams["CACHE_TIME"],

попробуйте просто вписать необходимые данные
Владимир Мороз 14.08.2016
Спасибо, буду разбираться с параметрами
Кирилл 22.05.2017
Михаил, здравствуйте. Немного не понял
Цитата

Копируем catalog.section из section.php в sections.php, просто как есть.
У меня в файле section.php идет только проверка на то, как располагается фильтр - горизонтально или вертикально.
Код
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
use Bitrix\Main\Loader;
use Bitrix\Main\ModuleManager;

if ($isFilter)
{
...СОКРАЩЕНО МОДЕРАТОРОМ ТУТ ТИПОВОЙ ВЫЗОВ ИЗ ОДЕЖДА+...
</div>
Тк я хочу вывести фильтр горизонтально, иду в файл section_horizontal.php.
Код
 <? if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) die();
...СОКРАЩЕНО МОДЕРАТОРОМ ТУТ ТИПОВОЙ ВЫЗОВ ИЗ ОДЕЖДА+...
</div>
<? endif ?>
В  этом файле я вижу что сначала идет вызов умного фильтра bitrix:catalog.smart.filter, затем блок распродаж bitrix:sale.products.gift.section, затем идет список разделов bitrix:catalog.section.list, далее  вызов компонента сравниваемых товаров bitrix:catalog.compare.list и наконец вызов  компонента конкретного раздела bitrix:catalog.section и дальше еще 1 вызов при условии что установлен модуль магазина . Вот с этого момента я не понял что именно нужно сделать по вашему примеру, для вывода всех элементов в корне инфоблока. Не пойму что копировать + не вижу строчку
Цитата
"SHOW_ALL_WO_SECTION" => "N",
в коде вызова catalog.section ....... Подскажите что я упустил из внимания
PS. Использую редакцию Старт. Обновления все свежие
Михаил Базаров 23.05.2017
Цитата
Кирилл написал:
Михаил, здравствуйте. Немного не понял

Обрезано: вопрос в предыдущем посте

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

https://camouf.ru/blog-note/2502/
Кирилл 24.05.2017
Цитата
Михаил Базаров пишет:
Я думаю, вот это вам прояснит ситуацию. Тут я вызываю умный фильтр, но перед этим делаю необходимые правки, как раз уместные для вашей ситуации

https://camouf.ru/blog-note/2502/
Спасибо, понятный урок на видео. Вывел все товары в корне каталога.  Сверху (в корне каталога)  навесил вывод фильтра с условием


Код
<?$show_root_filter = "/test2/";
if (strstr($APPLICATION->GetCurDir(), $show_root_filter)) {
... вызов компонента умного фильтра ...
 }
Однако при фильтрации данный фильтр показывает что выбрано 0 элементов, однако если нажать показать элементы подходящие по параметру, то показывает как и нужно. Это вообще правится или проще скрыть  показ количества элементов при выбранных параметрах фильтра?


PS. есть еще второй вопрос немного не по теме. (Вы слету определили шаблон который я пытаюсь кастомизировать, поэтому попробую его вам задать)
Пытаюсь кастомизировать компонент catalog для этого я хочу перенести  его в папку local для этого скопировал комплексный компонент catalog через режим правки, затем я скопировал через админку комплексный компонент catalog.section и добавил к дефолтному шаблону .default свой шаблон /local/templates/шаблон_сайта/components/bitrix/catalog.section/kirill-catalog-section/
После добавления шаблона под моим названием я вносил изменения в код вызова компонента (менял .default на свое название)
Однако в catalog.section после <!-- items-container --> есть  управляющая констукция switch() в которой в зависимости от условия case подключается  компонент  bitrix:catalog.item
Вот с ним у меня возникла проблема -  пытался также скопировать папку компонента в   /local/templates/шаблон_сайта/components/bitrix/catalog.item/templates/.default/card/


Однако этот шаблон не подтягивается - вместо него подтягивается шаблон из /bitrix/components/bitrix/catalog.item/templates/.default/card/

Также пытался создать свой шаблон /local/templates/шаблон_сайта/components/bitrix/catalog.item/templates/moi_shablon/card/ и прописать его вызов в catalog.section

Код
 case 2:
                  ?>
                  <div class="col-xs-12 product-item-small-card">
                     <div class="row">
                        <?
                        foreach ($rowItems as $item)
                        {
                           ?>
                           <div class="col-sm-4 product-item-big-card">
                              <div class="row">
                                 <div class="col-md-12">
                                    <?
                                    $APPLICATION->IncludeComponent(
                                       'bitrix:catalog.item',
                                       'moi_shablon',
                                       array(
                                          'RESULT' => array(
                                             'ITEM' => $item,
                                             'AREA_ID' => $areaIds[$item['ID']],
                                             'TYPE' => $rowData['TYPE'],
                                             'BIG_LABEL' => 'N',
                                             'BIG_DISCOUNT_PERCENT' => 'N',
                                             'BIG_BUTTONS' => 'Y',
                                             'SCALABLE' => 'N'
                                          ),
                                          'PARAMS' => $generalParams
                                             + array('SKU_PROPS' => $arResult['SKU_PROPS'][$item['IBLOCK_ID']])
                                       ),
                                       $component,
                                       array('HIDE_ICONS' => 'Y')
                                    );
                                    ?>
                                 </div>
                              </div>
                           </div>
                           <?
                        }
                        ?>
                     </div>
                  </div>
                  <?
                  break;
Однако подтягивается все равно не из папки local.

Если не сложно и есть время подскажите в чем моя ошибка.
Кирилл 25.05.2017
Сам решил вопрос. Я олень. выше я писал что подтягивал компоненты из папки  /local/templates/шаблон_сайта/components/bitrix/catalog.item/ а нужно было /local/components/мое_пространство_имён/catalog.item/ Вот такой вот я олень - не внимательно разобрался с пространствами имен, но теперь все пучком.
Михаил Базаров 25.05.2017
Цитата
Кирилл написал:
Сам решил вопрос. Я олень. выше я писал что подтягивал компоненты из папки    /local/templates/шаблон_сайта/components/bitrix/catalog.item/   а нужно было    /local/components/мое_пространство_имён/catalog.item/   Вот такой вот я олень - не внимательно разобрался с пространствами имен, но теперь все пучком.
А зачем вы скопировали компонент? Или кастомизировали его логику? Если просто шаблон дорабатывали- лучше всетаки, скопировать именно шаблон компонента в шаблон своего сайта
Макс Терещенко 30.05.2017
Добрый день.

Вывел все товары на отдельной странице с помощью catalog.section ,
навесил фильтр чтоб показывались только товары со свойством - "спецпредложение".
Никак не получается вывести цену. В template.php цена выводится в этой строчке:

<span class="price" id="product-price-<?=$arItem["ID"]?>"><?=$arItem["MIN_PRICE"]["PRINT_VALUE"]?>

В битриксе только пытаюсь разобраться, куда смотреть?
Алексей Коновалов 28.08.2017
Цитата
Михаил Базаров пишет:
Цитата
Кирилл написал:
Сам решил вопрос. Я олень. выше я писал что подтягивал компоненты из папки /local/templates/шаблон_сайта/components/bitrix/catalog.item/ а нужно было /local/components/мое_пространство_имён/catalog.item/ Вот такой вот я олень - не внимательно разобрался с пространствами имен, но теперь все пучком.
А зачем вы скопировали компонент? Или кастомизировали его логику? Если просто шаблон дорабатывали- лучше всетаки, скопировать именно шаблон компонента в шаблон своего сайта
Михаил, добрый вечер!
Аналогичная проблема.. Просто копирование шаблона компонента catalog.item в папку шаблона в local результата не приносит. В Ваших уроках используется старый шаблон каталога. Там проблем с редактированием карточки товара в списке проблем нет. А вот с новым каталогам - проблемка.. Тянет почему-то упорно шаблон из папки битрикс.. Может сталкивались с таким недугом?
evvdemin 12.09.2017
Цитата
Алексей Коновалов пишет:
Цитата
Михаил Базаров пишет:
Цитата
Кирилл написал:
Сам решил вопрос. Я олень. выше я писал что подтягивал компоненты из папки /local/templates/шаблон_сайта/components/bitrix/catalog.item/ а нужно было /local/components/мое_пространство_имён/catalog.item/ Вот такой вот я олень - не внимательно разобрался с пространствами имен, но теперь все пучком.
А зачем вы скопировали компонент? Или кастомизировали его логику? Если просто шаблон дорабатывали- лучше всетаки, скопировать именно шаблон компонента в шаблон своего сайта
Михаил, добрый вечер!
Аналогичная проблема.. Просто копирование шаблона компонента catalog.item в папку шаблона в local результата не приносит. В Ваших уроках используется старый шаблон каталога. Там проблем с редактированием карточки товара в списке проблем нет. А вот с новым каталогам - проблемка.. Тянет почему-то упорно шаблон из папки битрикс.. Может сталкивались с таким недугом?
Если скопировали компонент в лоб с папкой 'templates', работать не будет. Исключите эту промежуточную папку в компоненте item и все будет.