Форум пользователей Impera CMS
Impera CMS - отличный движок для лёгкого создания интернет магазина.
Обладает невероятным количеством функций, необходимых в онлайн торговле.

Следить
Главная
15:13
29 окт
#
?
написал:

Добрый день.
Работаю с настройкой Вашего движка.
http://*****.com.ua/
Лицензия была куплена у Вас.

Есть вопрос по выводу категорий:
Есть около 10-15 категорий и они разбиты, тематически, на 3 блока. (сейчас они выводятся стандартным образом, все в одном блоке)
В каждом блоке необходимо вывести только те категории, которые мне необходимы здесь. Например 1й блок категория 2,5,6,10 и т.д. Может выборка именно по id или еще что-нибудь.

Увеличение вложенности за счет подкатегорий не подходит.
Существует ли вариант реализации?

19:04
29 окт
#
написал:

В Импере в папке внешних модулей (это папка design/common_parts) есть удобный модуль AIMatrix Categories (это файл design/common_parts/AIMatrix/categories.htm). С помощью него можно реализовать Вашу задачу. В нужные места шаблона подключаете этот модуль необходимое количество раз, то есть по разу для 3 предполагаемых блоков категорий. В каждом подключении даете желаемый набор параметров.


Вариант 1. Вывод блоков категорий по именам веток.

Предположим каталог товаров сайта содержит 10 категорий верхнего уровня (веток), разумеется внутри каждой есть свои подкатегории, глубина вложения может быть любой и нам сейчас не интересна. Теперь представим, нас просят вывести на страницу сайта в три отдельных блока (div-контейнера) три ветки каталога: например Видеокарты, Материнские платы Asus и Принтеры. Причем каждый блок просят вывести в виде UL-списка с глубиной вложенности не далее 4 подкатегорий. Привожу ниже три вызова упомянутого модуля, в каждом случае применяются свои параметры вызова, их отличия выделены синим цветом, серым выделены неизменившиеся параметры.

{* ---------- выводим блок 1 ---------- *}

{include file = '../../common_parts/AIMatrix/categories.htm'

         items = $categories|default:false

         filter = ''
         namepath = 'Видеокарты'
         maxlevel = 4

         opentag = '<div class="categories-box">'

             box_opentag = '<h2> Это блок 1 </h2>'

                 listing_opentag = '<ul>'
                     link_opentag = '<li>'

                         a_id = ''
                         a_class = ''
                         a_active_class = 'active'
                         a_highlighted_class = 'highlighted'
                         a_text_maxsize = 256
                         a_target = ''

                         sublisting_opentag = '<ul class="subitems">'
                             sublink_opentag = '<li>'

                             sublink_closetag = '</li>'
                         sublisting_closetag = '</ul>'

                     link_closetag = '</li>'
                 listing_closetag = '</ul>'

             box_closetag = ''

         closetag = '</div>'}



{* ---------- выводим блок 2 ---------- *}

{include file = '../../common_parts/AIMatrix/categories.htm'

         items = $categories|default:false

         filter = ''
         namepath = 'Материнские платы / Asus'
         maxlevel = 4

         opentag = '<div class="categories-box">'

             box_opentag = '<h2> Это блок 2 </h2>'

                 listing_opentag = '<ul>'
                     link_opentag = '<li>'

                         a_id = ''
                         a_class = ''
                         a_active_class = 'active'
                         a_highlighted_class = 'highlighted'
                         a_text_maxsize = 256
                         a_target = ''

                         sublisting_opentag = '<ul class="subitems">'
                             sublink_opentag = '<li>'

                             sublink_closetag = '</li>'
                         sublisting_closetag = '</ul>'

                     link_closetag = '</li>'
                 listing_closetag = '</ul>'

             box_closetag = ''

         closetag = '</div>'}



{* ---------- выводим блок 3 ---------- *}

{include file = '../../common_parts/AIMatrix/categories.htm'

         items = $categories|default:false

         filter = ''
         namepath = 'Принтеры'
         maxlevel = 4

         opentag = '<div class="categories-box">'

             box_opentag = '<h2> Это блок 3 </h2>'

                 listing_opentag = '<ul>'
                     link_opentag = '<li>'

                         a_id = ''
                         a_class = ''
                         a_active_class = 'active'
                         a_highlighted_class = 'highlighted'
                         a_text_maxsize = 256
                         a_target = ''

                         sublisting_opentag = '<ul class="subitems">'
                             sublink_opentag = '<li>'

                             sublink_closetag = '</li>'
                         sublisting_closetag = '</ul>'

                     link_closetag = '</li>'
                 listing_closetag = '</ul>'

             box_closetag = ''

         closetag = '</div>'}


Как видно, мы каждый блок выводили с помощью одного модуля, просто меняя путевое имя желаемой категории и для примера оглавление контейнера. Модуль удобен тем, что позволяет прямо в параметрах задать:

  • items - из какой переменной движка брать записи категорий;
  • filter - какой фильтр применить к записям;
  • maxlevel - максимальное число выводимых уровней вложенности;
  • namepath - от какой ветки каталога начать вывод;
  • opentag и closetag - каким тегом (или html-фрагментом) будет открыт и закрыт блок;
  • box_opentag и box_closetag - каким тегом будет открыта и закрыта внутренняя часть блока;
  • listing_opentag и listing_closetag - каким тегом открывается и закрывается сам список категорий;
  • link_opentag и link_closetag - каким тегом открывается и закрывается каждый элемент списка;
  • sublisting_opentag и sublisting_closetag - каким тегом открывается и закрывается каждая подкатегория;
  • sublink_opentag и sublink_closetag - каким тегом открывается и закрывается каждый элемент подкатегории;
  • a_id и a_class - какой класс и/или идентификатор имеет каждая ссылка;
  • a_active_class - какой класс имеет ссылка активного элемента;
  • a_highlighted_class - какой класс у ссылки подсвеченного (выделенного в админпанели) элемента;
  • a_text_maxsize - до какого максимального размера обрезать текст ссылки, если он больше;
  • a_target - в каком окне должна открыться ссылка.



Вариант 2. Вывод блоков категорий по фильтру параметров.

Предположим известен перечень идентификаторов категорий, например 2, 37, 45, 61, которые хотелось бы вывести отдельными блоками. Используем тот же модуль, только задействуем в нем фильтр по полю category_id, которое есть в каждой записи категории.

{* задаем наш список идентификаторов категорий *}

{$my_list = [2, 37, 45, 61]}



{* в цикле перебираем список идентификаторов *}

{foreach $my_list as $id}



    {* выводим блок *}

    {include file = '../../common_parts/AIMatrix/categories.htm'

             items = $categories|default:false

             filter = ['category_id' => $id]
             namepath = ''
             maxlevel = 4

             opentag = '<div class="categories-box">'

                 box_opentag = '<h2> Это категория с идентификатором '|cat:$id|cat:' </h2>'

                     listing_opentag = '<ul>'
                         link_opentag = '<li>'

                             a_id = ''
                             a_class = ''
                             a_active_class = 'active'
                             a_highlighted_class = 'highlighted'
                             a_text_maxsize = 256
                             a_target = ''

                             sublisting_opentag = '<ul class="subitems">'
                                 sublink_opentag = '<li>'

                                 sublink_closetag = '</li>'
                             sublisting_closetag = '</ul>'

                         link_closetag = '</li>'
                     listing_closetag = '</ul>'

                 box_closetag = ''

             closetag = '</div>'}



{/foreach}


Текущей версией данного модуля является 1.2, в ней фильтр считается массивом, тем самым позволяя в случае нужды фильтровать категории по нескольким полям сразу, однако еще не поддерживается возможность передать список (подмассив) в каком-то из элементов фильтра. Это сделаю в следующей версии, что позволит решать задачи, когда в один блок надо вывести категорию X + категорию Y + категорию Z, то есть когда фильтр способен быть записанным так: ['category_id' => [2, 37, 45, 61]].

Написание ответа

Перед публикацией рекомендуется использовать Предпросмотр, чтобы увидеть конечный вид сообщения.


Обратите внимание! Для противодействия спаму новые посты форума проявляются с задержкой от нескольких минут, пока не пройдут модерацию.