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

Следить
Главная
11:18
25 сен
#
?
написал:

Вопрос: Как выводить в категориях не только ее подкатегории, но и категории с тем же родителем, что и нынешняя категория + в товаре чтобы отображался список всех категории с парентом категории самого товара?

Категории сейчас выводятся в нашем шаблоне так, и получается список подкатегорий текущей категории.

{include file = '../../../common_parts/AIMatrix/Constructor/items.htm'
         items = (isset($category)) ? $category->subcategories : $categories
         maxcount = 100000
         opentag = '<div class="block">'
             listing_opentag = '<ul class="bullet">'
                 link_opentag = '<li class="item">'
                     a_params = ''
                 link_closetag = '</li>'
             listing_closetag = '</ul>'
         closetag = '</div>'}

Что исправить? То есть как подняться на уровень выше, вывести список подкатегорий ее родителя.

17:10
25 сен
#
написал:

Исправление 1 В шаблоне - задействуем свою шаблонную функцию, например назовем ее getParentSubcategories, вызов которой поставим в шаблоне, а тело функции напишем позже.

Итак, вот как будет выглядеть исправленный фрагмент в вашем шаблоне:

{if !empty($category)}
    {getParentSubcategories from=$category result=items}
{else}
    {$items = $categories}
{/if}

{include file = '../../../common_parts/AIMatrix/Constructor/items.htm'
         items = $items
         maxcount = 100000
         opentag = '<div class="block">'
             listing_opentag = '<ul class="bullet">'
                 link_opentag = '<li class="item">'
                     a_params = ''
                 link_closetag = '</li>'
             listing_closetag = '</ul>'
         closetag = '</div>'}


Суть действия: если существует текущая категория $category, с помощью шаблонной функции получаем массив подкатегорий ее родителя и передаем в локальную переменную $items. Иначе текущей категории нет, то есть посетитель сейчас не на странице товара (где эта переменная существует) и не на странице категории (где она тоже существует), следовательно в локальную переменную передаем все дерево категорий $categories.


Исправление 2 Нужно зарегистрировать свою шаблонную функцию. Открываем в шаблоне файл emulator.php, там есть класс TemplateEmulator и в нем определен метод регистрации вспомогательных функций - setSmartyPlugins, в него дописываем регистрацию нашей функции таким образом:

class TemplateEmulator {
    ...
    ...
    protected function setSmartyPlugins ( & $cms ) {
        ...
        ...
        $cms->smarty->registerPlugin('function',
                                     'getParentSubcategories',
                                     array($this, 'getParentSubcategories'));
    }
    ...
    ...
}



Исправление 3 Теперь в тот же класс TemplateEmulator добавим метод нашей функции следующего содержания:

class TemplateEmulator {
    ...
    ...
    public function getParentSubcategories ( $params = null, & $smarty = null ) {
        $cat = $params['from'];
        $var = $params['result'];
        if (empty($cat->path) || count($cat->path) <= 1) {
            $smarty->assignByRef($var, $this->cms->categories_tree);
        } else {
            $id = $cat->path[count($cat->path) - 2]->category_id;
            $smarty->assignByRef($var, $this->cms->categories[$id]->subcategories);
        }
        return '';
    }
}


Суть действия: принятая в парметрах метода переменная текущей категории $cat хранит в своем свойстве path весь путь по узлам дерева от его корня до этой текущей категории. Следовательно вторым с конца пути будет указатель на идентификатор родителя этой категории. Мы извлекаем данный идентификатор $id и через него в плоском списке категорий (то есть в categories) выходим на подкатегории subcategories родителя. Этот список отдаем в указанную входными параметрами переменную $var шаблона. Если же путь содержит всего одну запись (пользователь в первом уровне вложенности категорий, и родителем по сути является корень дерева) или пути вообще нет (пользователь не в товаре и не в категории), тогда в шаблон отдаем древовидный список категорий categories_tree.

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

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


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