Перейти к содержимому


Фотография
- - - - -

Как Сделать Чтобы В Списке Категорий Отображались Только Дочерние Категории


Лучший Ответ Sandmansss , 01 March 2019 - 13:37

Сам спросил - сам ответил.

Нашел схожее решение - http://forum.jbzoo.c...ории#entry60072

 

Сделал незначительные изменения

сайт\media\zoo\applications\jbuniversal\config\mod_jbzoo_search\itemcategory.xml

Заменяем на 

<?xml version="1.0" encoding="utf-8"?>
<!--
    JBZoo App is universal Joomla CCK, application for YooTheme Zoo component
 
    @package     jbzoo
    @version     2.x Pro
    @author      JBZoo App http://jbzoo.com
    @copyright   Copyright (C) JBZoo.com,  All rights reserved.
    @license     http://jbzoo.com/license-pro.php JBZoo Licence
    @coder       Denis Smetannikov <denis@jbzoo.com>
-->
<element>
    <params group="render">
 
        <param name="jbzoo_filter_render"
               type="list"
               label="JBZOO_ELEMENT_TEMPLATE"
               description="JBZOO_ELEMENT_TEMPLATE_DESC"
               default="_auto_"
                >
            <option value="_auto_">JBZOO_ELEMENT_TEMPLATE_AUTO</option>
            <option value="category">JBZOO_ELEMENT_TEMPLATE_CATEGORIES</option>
            <option value="category-chosen">JBZOO_ELEMENT_TEMPLATE_CATEGORIES_CHOSEN</option>
            <option value="category-hidden">JBZOO_ELEMENT_TEMPLATE_CATEGORY_HIDDEN</option>
            <option value="hidden">JBZOO_ELEMENT_TEMPLATE_HIDDEN</option>
        </param>
 
        <param name="jbzoo_filter_default"
               type="text"
               default=""
               label="JBZOO_FILTER_DEFAULT"
               description="JBZOO_FILTER_DEFAULT_DESC"
                />
 
        <param name="jbzoo_category_mode"
               type="list"
               default="tree"
               label="JBZOO_FILTER_CATEGORY_MODE"
               description="JBZOO_FILTER_CATEGORY_MODE_DESC">
            <option value="none">JBZOO_FILTER_NONE</option>
            <option value="tree">JBZOO_FILTER_TREE</option>
            <option value="parent">JBZOO_FILTER_ONLY_PARENT</option>
            <option value="child">JBZOO_FILTER_ONLY_CHILD</option>
            <option value="child_off_category">Дочерние категории родительской</option>
        </param>
 
        <param name="jbzoo_filter_multiple"
               type="jbbool"
               default="0"
               label="JBZOO_FILTER_MULTIPLE"
               description="JBZOO_FILTER_MULTIPLE_DESC"/>
 
        <param name="jbzoo_filter_count"
               type="jbbool"
               default="1"
               label="JBZOO_FILTER_COUNT"
               description="JBZOO_FILTER_COUNT_DESC"/>
 
        <param name="jbzoo_filter_placeholder"
               type="text"
               default=""
               label="JBZOO_FILTER_PLACEHOLDER"
               description="JBZOO_FILTER_PLACEHOLDER_DESC"
                />
 
    </params>
 
</element>
 

Далее в 

сайт\media\zoo\applications\jbuniversal\framework\render\filter\element.category.php

Заменяем на 

<?php
/**
 * JBZoo App is universal Joomla CCK, application for YooTheme Zoo component
 *
 * @package     jbzoo
 * @version     2.x Pro
 * @author      JBZoo App http://jbzoo.com
 * @copyright   Copyright (C) JBZoo.com,  All rights reserved.
 * @license     http://jbzoo.com/license-pro.php JBZoo Licence
 * @coder       Denis Smetannikov <denis@jbzoo.com>
 */
 
// no direct access
defined('_JEXEC') or die('Restricted access');
 
 
/**
 * Class JBFilterElementCategory
 */
class JBFilterElementCategory extends JBFilterElement
{
    /**
     * Render HTML
     * @return string
     */
    function html()
    {
        $values = $this->_getValues();
 
        return $this->app->jbhtml->select(
            $this->_createOptionsList($values),
            $this->_getName(),
            $this->_attrs,
            $this->_value,
            $this->_getId()
        );
    }
 
    /**
     * Get categories list
     * @return array
     */
    private function _getCategoriesList()
    {
        $applicationId = (int)$this->_params->get('item_application_id', 0);
        $application   = $this->app->table->application->get($applicationId);
        $modeParam     = $this->_params->get('jbzoo_category_mode', 'tree');
 
        $allCategories = array();
        if ($application) {
            $allCategories = $application->getCategories(true);
        }
 
        $result = array();
 
        if (empty($allCategories)) {
            return $result;
        }
 
        if ($modeParam == 'parent') {
            // only parents
            foreach ($allCategories as $category) {
                if (!$category->parent) {
                    $result[] = $category;
                }
            }
 
        } elseif ($modeParam == 'child') {
            // only childs
            foreach ($allCategories as $category) {
                if ($category->parent) {
                    $result[] = $category;
                }
            }
 
        } elseif ($modeParam == 'tree') {
            // tree view
            $result = $this->app->tree->buildList(0, $this->app->tree->build($allCategories, 'Category'));
 
        } elseif ($modeParam == 'child_off_category') {

			$parentCategoryId = (int)$this->app->jbrequest->getSystem('category');
			
            $parentCategory   = $this->app->table->category->get($parentCategoryId);
			$categoryId = $this->app->jbrequest->getSystem('category');
            if ($parentCategory) {
 
                $children = $parentCategory->getChildren();
 
                if ($children) {
                    foreach ($children as $child) {
                        $result[] = $child;
                    }
                }
 
            }
 
        } else {
            $result = $allCategories;
        }
 
        return $result;
    }
 
    /**
     * Get categories list values
     * @param null $type
     * @return array
     */
    protected function _getValues($type = null)
    {
        $catList   = $this->_getCategoriesList();
        $catValues = $this->_getDbValues();
 
        $categoriesList = array();
        foreach ($catList as $category) {
 
            $found = false;
            foreach ($catValues as $catValue) {
 
                if ($catValue['value'] == $category->name) {
                    $category->countItems = $catValue['count'];
                    $categoriesList[]     = $category;
                    $found                = true;
                    break;
                }
 
            }
 
            if (!$found) {
                $category->countItems = 0;
                $categoriesList[]     = $category;
            }
        }
 
        $modeParam = $this->_params->get('jbzoo_category_mode', 'tree');
 
        $options = array();
        foreach ($categoriesList as $category) {
 
            if ($modeParam == 'tree') {
                $options[] = array(
                    'value' => $category->id,
                    'text'  => '&nbsp;&nbsp;&nbsp;' . $category->treename,
                    'count' => $this->_isCountShow ? $category->countItems : null,
                );
            } else {
                $options[] = array(
                    'value' => $category->id,
                    'text'  => $category->name,
                    'count' => $this->_isCountShow ? $category->countItems : null,
                );
            }
        }
 
        return $options;
    }
 
    /**
     * @param $value
     * @return mixed
     */
    protected function _getElementValue($value)
    {
        if ($this->_isValueEmpty($value)) {
            $value = $this->app->jbrequest->getSystem('category');
        }
 
        return parent::_getElementValue($value);
    }
 
}
 

Собственно все изменение заключалось в строчке 

$parentCategoryId = (int)$this->_params->get('jbzoo_parent_category_id', 0);

Заменил на

$parentCategoryId = (int)$this->app->jbrequest->getSystem('category')
Перейти к сообщению


Сообщений в теме: 2

#1 Sandmansss

Sandmansss

Отправлено 01 March 2019 - 13:02

Собственно сабж.

Не пойму как сделать.

У менять есть несколько родительских категорий (магазин одежды)

- Для мальчиков

- Для девочек

 

И эти категории вынесены в основное меню. Когда кликаешь к примеру на "Для девочек"

Открывается категория для девочек + фильтр и мы сразу попадаем в товары выбранной категории.

 тут все хорошо.

Но у каждой родительской категории есть свои подкатегории одежды. 

К примеру у девочек блузки, а у мальчиков брюки

 

Но в фильтре даже если поставить отображать дочерние категории отображаются все дочерние категории.

И для мальчиков и для девочек.

 

Как сделать так чтобы список категорий в фильтре зависел от выбранной родительской категории??

 


  • 0

#2 Sandmansss

Sandmansss

Отправлено 01 March 2019 - 13:37   Лучший Ответ

Сам спросил - сам ответил.

Нашел схожее решение - http://forum.jbzoo.c...ории#entry60072

 

Сделал незначительные изменения

сайт\media\zoo\applications\jbuniversal\config\mod_jbzoo_search\itemcategory.xml

Заменяем на 

<?xml version="1.0" encoding="utf-8"?>
<!--
    JBZoo App is universal Joomla CCK, application for YooTheme Zoo component
 
    @package     jbzoo
    @version     2.x Pro
    @author      JBZoo App http://jbzoo.com
    @copyright   Copyright (C) JBZoo.com,  All rights reserved.
    @license     http://jbzoo.com/license-pro.php JBZoo Licence
    @coder       Denis Smetannikov <denis@jbzoo.com>
-->
<element>
    <params group="render">
 
        <param name="jbzoo_filter_render"
               type="list"
               label="JBZOO_ELEMENT_TEMPLATE"
               description="JBZOO_ELEMENT_TEMPLATE_DESC"
               default="_auto_"
                >
            <option value="_auto_">JBZOO_ELEMENT_TEMPLATE_AUTO</option>
            <option value="category">JBZOO_ELEMENT_TEMPLATE_CATEGORIES</option>
            <option value="category-chosen">JBZOO_ELEMENT_TEMPLATE_CATEGORIES_CHOSEN</option>
            <option value="category-hidden">JBZOO_ELEMENT_TEMPLATE_CATEGORY_HIDDEN</option>
            <option value="hidden">JBZOO_ELEMENT_TEMPLATE_HIDDEN</option>
        </param>
 
        <param name="jbzoo_filter_default"
               type="text"
               default=""
               label="JBZOO_FILTER_DEFAULT"
               description="JBZOO_FILTER_DEFAULT_DESC"
                />
 
        <param name="jbzoo_category_mode"
               type="list"
               default="tree"
               label="JBZOO_FILTER_CATEGORY_MODE"
               description="JBZOO_FILTER_CATEGORY_MODE_DESC">
            <option value="none">JBZOO_FILTER_NONE</option>
            <option value="tree">JBZOO_FILTER_TREE</option>
            <option value="parent">JBZOO_FILTER_ONLY_PARENT</option>
            <option value="child">JBZOO_FILTER_ONLY_CHILD</option>
            <option value="child_off_category">Дочерние категории родительской</option>
        </param>
 
        <param name="jbzoo_filter_multiple"
               type="jbbool"
               default="0"
               label="JBZOO_FILTER_MULTIPLE"
               description="JBZOO_FILTER_MULTIPLE_DESC"/>
 
        <param name="jbzoo_filter_count"
               type="jbbool"
               default="1"
               label="JBZOO_FILTER_COUNT"
               description="JBZOO_FILTER_COUNT_DESC"/>
 
        <param name="jbzoo_filter_placeholder"
               type="text"
               default=""
               label="JBZOO_FILTER_PLACEHOLDER"
               description="JBZOO_FILTER_PLACEHOLDER_DESC"
                />
 
    </params>
 
</element>
 

Далее в 

сайт\media\zoo\applications\jbuniversal\framework\render\filter\element.category.php

Заменяем на 

<?php
/**
 * JBZoo App is universal Joomla CCK, application for YooTheme Zoo component
 *
 * @package     jbzoo
 * @version     2.x Pro
 * @author      JBZoo App http://jbzoo.com
 * @copyright   Copyright (C) JBZoo.com,  All rights reserved.
 * @license     http://jbzoo.com/license-pro.php JBZoo Licence
 * @coder       Denis Smetannikov <denis@jbzoo.com>
 */
 
// no direct access
defined('_JEXEC') or die('Restricted access');
 
 
/**
 * Class JBFilterElementCategory
 */
class JBFilterElementCategory extends JBFilterElement
{
    /**
     * Render HTML
     * @return string
     */
    function html()
    {
        $values = $this->_getValues();
 
        return $this->app->jbhtml->select(
            $this->_createOptionsList($values),
            $this->_getName(),
            $this->_attrs,
            $this->_value,
            $this->_getId()
        );
    }
 
    /**
     * Get categories list
     * @return array
     */
    private function _getCategoriesList()
    {
        $applicationId = (int)$this->_params->get('item_application_id', 0);
        $application   = $this->app->table->application->get($applicationId);
        $modeParam     = $this->_params->get('jbzoo_category_mode', 'tree');
 
        $allCategories = array();
        if ($application) {
            $allCategories = $application->getCategories(true);
        }
 
        $result = array();
 
        if (empty($allCategories)) {
            return $result;
        }
 
        if ($modeParam == 'parent') {
            // only parents
            foreach ($allCategories as $category) {
                if (!$category->parent) {
                    $result[] = $category;
                }
            }
 
        } elseif ($modeParam == 'child') {
            // only childs
            foreach ($allCategories as $category) {
                if ($category->parent) {
                    $result[] = $category;
                }
            }
 
        } elseif ($modeParam == 'tree') {
            // tree view
            $result = $this->app->tree->buildList(0, $this->app->tree->build($allCategories, 'Category'));
 
        } elseif ($modeParam == 'child_off_category') {

			$parentCategoryId = (int)$this->app->jbrequest->getSystem('category');
			
            $parentCategory   = $this->app->table->category->get($parentCategoryId);
			$categoryId = $this->app->jbrequest->getSystem('category');
            if ($parentCategory) {
 
                $children = $parentCategory->getChildren();
 
                if ($children) {
                    foreach ($children as $child) {
                        $result[] = $child;
                    }
                }
 
            }
 
        } else {
            $result = $allCategories;
        }
 
        return $result;
    }
 
    /**
     * Get categories list values
     * @param null $type
     * @return array
     */
    protected function _getValues($type = null)
    {
        $catList   = $this->_getCategoriesList();
        $catValues = $this->_getDbValues();
 
        $categoriesList = array();
        foreach ($catList as $category) {
 
            $found = false;
            foreach ($catValues as $catValue) {
 
                if ($catValue['value'] == $category->name) {
                    $category->countItems = $catValue['count'];
                    $categoriesList[]     = $category;
                    $found                = true;
                    break;
                }
 
            }
 
            if (!$found) {
                $category->countItems = 0;
                $categoriesList[]     = $category;
            }
        }
 
        $modeParam = $this->_params->get('jbzoo_category_mode', 'tree');
 
        $options = array();
        foreach ($categoriesList as $category) {
 
            if ($modeParam == 'tree') {
                $options[] = array(
                    'value' => $category->id,
                    'text'  => '&nbsp;&nbsp;&nbsp;' . $category->treename,
                    'count' => $this->_isCountShow ? $category->countItems : null,
                );
            } else {
                $options[] = array(
                    'value' => $category->id,
                    'text'  => $category->name,
                    'count' => $this->_isCountShow ? $category->countItems : null,
                );
            }
        }
 
        return $options;
    }
 
    /**
     * @param $value
     * @return mixed
     */
    protected function _getElementValue($value)
    {
        if ($this->_isValueEmpty($value)) {
            $value = $this->app->jbrequest->getSystem('category');
        }
 
        return parent::_getElementValue($value);
    }
 
}
 

Собственно все изменение заключалось в строчке 

$parentCategoryId = (int)$this->_params->get('jbzoo_parent_category_id', 0);

Заменил на

$parentCategoryId = (int)$this->app->jbrequest->getSystem('category')

Сообщение отредактировал Sandmansss: 01 March 2019 - 13:43

  • 2

#3 Sandmansss

Sandmansss

Отправлено 01 March 2019 - 13:45

Теперь в настройке фильтра - Вид списка появилось

Дочерние категории родительской

  

И в фильтр будут грузится только дочерние категории от основной.


  • 0




Click to return to top of page in style!