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


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

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


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

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

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

 

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

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

Заменяем на 

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!--
  3. JBZoo App is universal Joomla CCK, application for YooTheme Zoo component
  4. @package jbzoo
  5. @version 2.x Pro
  6. @author JBZoo App http://jbzoo.com
  7. @copyright Copyright (C) JBZoo.com, All rights reserved.
  8. @license http://jbzoo.com/license-pro.php JBZoo Licence
  9. @coder Denis Smetannikov <denis@jbzoo.com>
  10. -->
  11. <element>
  12. <params group="render">
  13. <param name="jbzoo_filter_render"
  14. type="list"
  15. label="JBZOO_ELEMENT_TEMPLATE"
  16. description="JBZOO_ELEMENT_TEMPLATE_DESC"
  17. default="_auto_"
  18. >
  19. <option value="_auto_">JBZOO_ELEMENT_TEMPLATE_AUTO</option>
  20. <option value="category">JBZOO_ELEMENT_TEMPLATE_CATEGORIES</option>
  21. <option value="category-chosen">JBZOO_ELEMENT_TEMPLATE_CATEGORIES_CHOSEN</option>
  22. <option value="category-hidden">JBZOO_ELEMENT_TEMPLATE_CATEGORY_HIDDEN</option>
  23. <option value="hidden">JBZOO_ELEMENT_TEMPLATE_HIDDEN</option>
  24. </param>
  25. <param name="jbzoo_filter_default"
  26. type="text"
  27. default=""
  28. label="JBZOO_FILTER_DEFAULT"
  29. description="JBZOO_FILTER_DEFAULT_DESC"
  30. />
  31. <param name="jbzoo_category_mode"
  32. type="list"
  33. default="tree"
  34. label="JBZOO_FILTER_CATEGORY_MODE"
  35. description="JBZOO_FILTER_CATEGORY_MODE_DESC">
  36. <option value="none">JBZOO_FILTER_NONE</option>
  37. <option value="tree">JBZOO_FILTER_TREE</option>
  38. <option value="parent">JBZOO_FILTER_ONLY_PARENT</option>
  39. <option value="child">JBZOO_FILTER_ONLY_CHILD</option>
  40. <option value="child_off_category">Дочерние категории родительской</option>
  41. </param>
  42. <param name="jbzoo_filter_multiple"
  43. type="jbbool"
  44. default="0"
  45. label="JBZOO_FILTER_MULTIPLE"
  46. description="JBZOO_FILTER_MULTIPLE_DESC"/>
  47. <param name="jbzoo_filter_count"
  48. type="jbbool"
  49. default="1"
  50. label="JBZOO_FILTER_COUNT"
  51. description="JBZOO_FILTER_COUNT_DESC"/>
  52. <param name="jbzoo_filter_placeholder"
  53. type="text"
  54. default=""
  55. label="JBZOO_FILTER_PLACEHOLDER"
  56. description="JBZOO_FILTER_PLACEHOLDER_DESC"
  57. />
  58. </params>
  59. </element>

Далее в 

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

Заменяем на 

  1. <?php
  2. /**
  3. * JBZoo App is universal Joomla CCK, application for YooTheme Zoo component
  4. *
  5. * @package jbzoo
  6. * @version 2.x Pro
  7. * @author JBZoo App http://jbzoo.com
  8. * @copyright Copyright (C) JBZoo.com, All rights reserved.
  9. * @license http://jbzoo.com/license-pro.php JBZoo Licence
  10. * @coder Denis Smetannikov <denis@jbzoo.com>
  11. */
  12. // no direct access
  13. defined('_JEXEC') or die('Restricted access');
  14. /**
  15. * Class JBFilterElementCategory
  16. */
  17. class JBFilterElementCategory extends JBFilterElement
  18. {
  19. /**
  20. * Render HTML
  21. * @return string
  22. */
  23. function html()
  24. {
  25. $values = $this->_getValues();
  26. return $this->app->jbhtml->select(
  27. $this->_createOptionsList($values),
  28. $this->_getName(),
  29. $this->_attrs,
  30. $this->_value,
  31. $this->_getId()
  32. );
  33. }
  34. /**
  35. * Get categories list
  36. * @return array
  37. */
  38. private function _getCategoriesList()
  39. {
  40. $applicationId = (int)$this->_params->get('item_application_id', 0);
  41. $application = $this->app->table->application->get($applicationId);
  42. $modeParam = $this->_params->get('jbzoo_category_mode', 'tree');
  43. $allCategories = array();
  44. if ($application) {
  45. $allCategories = $application->getCategories(true);
  46. }
  47. $result = array();
  48. if (empty($allCategories)) {
  49. return $result;
  50. }
  51. if ($modeParam == 'parent') {
  52. // only parents
  53. foreach ($allCategories as $category) {
  54. if (!$category->parent) {
  55. $result[] = $category;
  56. }
  57. }
  58. } elseif ($modeParam == 'child') {
  59. // only childs
  60. foreach ($allCategories as $category) {
  61. if ($category->parent) {
  62. $result[] = $category;
  63. }
  64. }
  65. } elseif ($modeParam == 'tree') {
  66. // tree view
  67. $result = $this->app->tree->buildList(0, $this->app->tree->build($allCategories, 'Category'));
  68. } elseif ($modeParam == 'child_off_category') {
  69.  
  70. $parentCategoryId = (int)$this->app->jbrequest->getSystem('category');
  71. $parentCategory = $this->app->table->category->get($parentCategoryId);
  72. $categoryId = $this->app->jbrequest->getSystem('category');
  73. if ($parentCategory) {
  74. $children = $parentCategory->getChildren();
  75. if ($children) {
  76. foreach ($children as $child) {
  77. $result[] = $child;
  78. }
  79. }
  80. }
  81. } else {
  82. $result = $allCategories;
  83. }
  84. return $result;
  85. }
  86. /**
  87. * Get categories list values
  88. * @param null $type
  89. * @return array
  90. */
  91. protected function _getValues($type = null)
  92. {
  93. $catList = $this->_getCategoriesList();
  94. $catValues = $this->_getDbValues();
  95. $categoriesList = array();
  96. foreach ($catList as $category) {
  97. $found = false;
  98. foreach ($catValues as $catValue) {
  99. if ($catValue['value'] == $category->name) {
  100. $category->countItems = $catValue['count'];
  101. $categoriesList[] = $category;
  102. $found = true;
  103. break;
  104. }
  105. }
  106. if (!$found) {
  107. $category->countItems = 0;
  108. $categoriesList[] = $category;
  109. }
  110. }
  111. $modeParam = $this->_params->get('jbzoo_category_mode', 'tree');
  112. $options = array();
  113. foreach ($categoriesList as $category) {
  114. if ($modeParam == 'tree') {
  115. $options[] = array(
  116. 'value' => $category->id,
  117. 'text' => '&nbsp;&nbsp;&nbsp;' . $category->treename,
  118. 'count' => $this->_isCountShow ? $category->countItems : null,
  119. );
  120. } else {
  121. $options[] = array(
  122. 'value' => $category->id,
  123. 'text' => $category->name,
  124. 'count' => $this->_isCountShow ? $category->countItems : null,
  125. );
  126. }
  127. }
  128. return $options;
  129. }
  130. /**
  131. * @param $value
  132. * @return mixed
  133. */
  134. protected function _getElementValue($value)
  135. {
  136. if ($this->_isValueEmpty($value)) {
  137. $value = $this->app->jbrequest->getSystem('category');
  138. }
  139. return parent::_getElementValue($value);
  140. }
  141. }

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

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

Заменил на

  1. $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

 

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

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

Заменяем на 

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!--
  3. JBZoo App is universal Joomla CCK, application for YooTheme Zoo component
  4. @package jbzoo
  5. @version 2.x Pro
  6. @author JBZoo App http://jbzoo.com
  7. @copyright Copyright (C) JBZoo.com, All rights reserved.
  8. @license http://jbzoo.com/license-pro.php JBZoo Licence
  9. @coder Denis Smetannikov <denis@jbzoo.com>
  10. -->
  11. <element>
  12. <params group="render">
  13. <param name="jbzoo_filter_render"
  14. type="list"
  15. label="JBZOO_ELEMENT_TEMPLATE"
  16. description="JBZOO_ELEMENT_TEMPLATE_DESC"
  17. default="_auto_"
  18. >
  19. <option value="_auto_">JBZOO_ELEMENT_TEMPLATE_AUTO</option>
  20. <option value="category">JBZOO_ELEMENT_TEMPLATE_CATEGORIES</option>
  21. <option value="category-chosen">JBZOO_ELEMENT_TEMPLATE_CATEGORIES_CHOSEN</option>
  22. <option value="category-hidden">JBZOO_ELEMENT_TEMPLATE_CATEGORY_HIDDEN</option>
  23. <option value="hidden">JBZOO_ELEMENT_TEMPLATE_HIDDEN</option>
  24. </param>
  25. <param name="jbzoo_filter_default"
  26. type="text"
  27. default=""
  28. label="JBZOO_FILTER_DEFAULT"
  29. description="JBZOO_FILTER_DEFAULT_DESC"
  30. />
  31. <param name="jbzoo_category_mode"
  32. type="list"
  33. default="tree"
  34. label="JBZOO_FILTER_CATEGORY_MODE"
  35. description="JBZOO_FILTER_CATEGORY_MODE_DESC">
  36. <option value="none">JBZOO_FILTER_NONE</option>
  37. <option value="tree">JBZOO_FILTER_TREE</option>
  38. <option value="parent">JBZOO_FILTER_ONLY_PARENT</option>
  39. <option value="child">JBZOO_FILTER_ONLY_CHILD</option>
  40. <option value="child_off_category">Дочерние категории родительской</option>
  41. </param>
  42. <param name="jbzoo_filter_multiple"
  43. type="jbbool"
  44. default="0"
  45. label="JBZOO_FILTER_MULTIPLE"
  46. description="JBZOO_FILTER_MULTIPLE_DESC"/>
  47. <param name="jbzoo_filter_count"
  48. type="jbbool"
  49. default="1"
  50. label="JBZOO_FILTER_COUNT"
  51. description="JBZOO_FILTER_COUNT_DESC"/>
  52. <param name="jbzoo_filter_placeholder"
  53. type="text"
  54. default=""
  55. label="JBZOO_FILTER_PLACEHOLDER"
  56. description="JBZOO_FILTER_PLACEHOLDER_DESC"
  57. />
  58. </params>
  59. </element>

Далее в 

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

Заменяем на 

  1. <?php
  2. /**
  3. * JBZoo App is universal Joomla CCK, application for YooTheme Zoo component
  4. *
  5. * @package jbzoo
  6. * @version 2.x Pro
  7. * @author JBZoo App http://jbzoo.com
  8. * @copyright Copyright (C) JBZoo.com, All rights reserved.
  9. * @license http://jbzoo.com/license-pro.php JBZoo Licence
  10. * @coder Denis Smetannikov <denis@jbzoo.com>
  11. */
  12. // no direct access
  13. defined('_JEXEC') or die('Restricted access');
  14. /**
  15. * Class JBFilterElementCategory
  16. */
  17. class JBFilterElementCategory extends JBFilterElement
  18. {
  19. /**
  20. * Render HTML
  21. * @return string
  22. */
  23. function html()
  24. {
  25. $values = $this->_getValues();
  26. return $this->app->jbhtml->select(
  27. $this->_createOptionsList($values),
  28. $this->_getName(),
  29. $this->_attrs,
  30. $this->_value,
  31. $this->_getId()
  32. );
  33. }
  34. /**
  35. * Get categories list
  36. * @return array
  37. */
  38. private function _getCategoriesList()
  39. {
  40. $applicationId = (int)$this->_params->get('item_application_id', 0);
  41. $application = $this->app->table->application->get($applicationId);
  42. $modeParam = $this->_params->get('jbzoo_category_mode', 'tree');
  43. $allCategories = array();
  44. if ($application) {
  45. $allCategories = $application->getCategories(true);
  46. }
  47. $result = array();
  48. if (empty($allCategories)) {
  49. return $result;
  50. }
  51. if ($modeParam == 'parent') {
  52. // only parents
  53. foreach ($allCategories as $category) {
  54. if (!$category->parent) {
  55. $result[] = $category;
  56. }
  57. }
  58. } elseif ($modeParam == 'child') {
  59. // only childs
  60. foreach ($allCategories as $category) {
  61. if ($category->parent) {
  62. $result[] = $category;
  63. }
  64. }
  65. } elseif ($modeParam == 'tree') {
  66. // tree view
  67. $result = $this->app->tree->buildList(0, $this->app->tree->build($allCategories, 'Category'));
  68. } elseif ($modeParam == 'child_off_category') {
  69.  
  70. $parentCategoryId = (int)$this->app->jbrequest->getSystem('category');
  71. $parentCategory = $this->app->table->category->get($parentCategoryId);
  72. $categoryId = $this->app->jbrequest->getSystem('category');
  73. if ($parentCategory) {
  74. $children = $parentCategory->getChildren();
  75. if ($children) {
  76. foreach ($children as $child) {
  77. $result[] = $child;
  78. }
  79. }
  80. }
  81. } else {
  82. $result = $allCategories;
  83. }
  84. return $result;
  85. }
  86. /**
  87. * Get categories list values
  88. * @param null $type
  89. * @return array
  90. */
  91. protected function _getValues($type = null)
  92. {
  93. $catList = $this->_getCategoriesList();
  94. $catValues = $this->_getDbValues();
  95. $categoriesList = array();
  96. foreach ($catList as $category) {
  97. $found = false;
  98. foreach ($catValues as $catValue) {
  99. if ($catValue['value'] == $category->name) {
  100. $category->countItems = $catValue['count'];
  101. $categoriesList[] = $category;
  102. $found = true;
  103. break;
  104. }
  105. }
  106. if (!$found) {
  107. $category->countItems = 0;
  108. $categoriesList[] = $category;
  109. }
  110. }
  111. $modeParam = $this->_params->get('jbzoo_category_mode', 'tree');
  112. $options = array();
  113. foreach ($categoriesList as $category) {
  114. if ($modeParam == 'tree') {
  115. $options[] = array(
  116. 'value' => $category->id,
  117. 'text' => '&nbsp;&nbsp;&nbsp;' . $category->treename,
  118. 'count' => $this->_isCountShow ? $category->countItems : null,
  119. );
  120. } else {
  121. $options[] = array(
  122. 'value' => $category->id,
  123. 'text' => $category->name,
  124. 'count' => $this->_isCountShow ? $category->countItems : null,
  125. );
  126. }
  127. }
  128. return $options;
  129. }
  130. /**
  131. * @param $value
  132. * @return mixed
  133. */
  134. protected function _getElementValue($value)
  135. {
  136. if ($this->_isValueEmpty($value)) {
  137. $value = $this->app->jbrequest->getSystem('category');
  138. }
  139. return parent::_getElementValue($value);
  140. }
  141. }

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

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

Заменил на

  1. $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!