Виджет категорий

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО

Вывод подкатегорий

#1 10 марта 2017 в 10:32
Всем доброго дня! Встал такой вопрос, чтобы виджет категорий, выводил содержимое подкатегорий отдельно вот таким образом clip2net.com/s/3IiJSno, а не все дерево сразу, как существует на данный момент. Технически сам разобраться не могу, руки кривые!(
Единственное чего смог добиться, изменил в файле /system/controllers/content/widgets/categories в место
  1. new fieldList('options:ctype_name', array(
  2. 'generator' => function($item) {
  3.  
  4. $model = cmsCore::getModel('content');
  5. $tree = $model->getContentTypes();
  6.  
  7. $items = array(0 => LANG_WD_CONTENT_CATS_DETECT);
  8.  
  9. if ($tree) {
  10. foreach ($tree as $item) {
  11. $items[$item['name']] = $item['title'];
  12. }
  13. }
  14.  
  15. return $items;
  16.  
  17. }
  18. )),
вот этот код взятый из виджета (Список контента)
  1. new fieldList('options:ctype_id', array(
  2. 'title' => LANG_CONTENT_TYPE,
  3. 'generator' => function($item) {
  4.  
  5. $model = cmsCore::getModel('content');
  6. $tree = $model->getContentTypes();
  7.  
  8. $items = array();
  9.  
  10. if ($tree) {
  11. foreach ($tree as $item) {
  12. $items[$item['id']] = $item['title'];
  13. }
  14. }
  15.  
  16. return $items;
  17.  
  18. },
  19. )),
  20.  
  21. new fieldList('options:category_id', array(
  22. 'title' => LANG_CATEGORY,
  23. 'parent' => array(
  24. 'list' => 'options:ctype_id',
  25. 'url' => href_to('content', 'widget_cats_ajax')
  26. ),
  27. 'items' => $cats_list
  28. )),
Функция в админке в виджете выбора подкатегории появилась, но возможно это и неправильно, не знаю, короче тыркался-тыркался, а с места не сдвинулся)) Требуется решение, что где заменить, в каком файле что подставить итд. Заранее благодарю откликнувшихся!
#2 10 марта 2017 в 17:06
С каждым часом становится всё грустнее(( от такого наплыва помощников
#3 10 марта 2017 в 18:29

С каждым часом становится всё грустнее(( от такого наплыва помощников

ynovskiy
Да и от количества внятных вопросов не веселеет cry
#4 10 марта 2017 в 19:14


С каждым часом становится всё грустнее(( от такого наплыва помощников

ynovskiy
Да и от количества внятных вопросов не веселеет cry

Олег Васильевич я
Так вроде все написано выше, нужно, чтобы в виджете категорий была возможность выбора подкатегории)
#5 10 марта 2017 в 19:29
если у категории допустим НОВОСТИ один список подкатегорий Политика, Экономика, Спорт, то выводятся эти значения (Политика, Экономика, Спорт)
Но если у подкатегории Политика, есть свои категории, такие как (Мировая, России, Украины) То при выборе раздела Новости выводится все дерево (ПОЛИТИКА-Мировая, России, Украины, ЭКОНОМИКА, СПОРТ) Мне же в данном случае нужно вывести, только (Мировая, России, Украины)
Вот!
#6 10 марта 2017 в 22:15

выводится все дерево (ПОЛИТИКА-Мировая, России, Украины, ЭКОНОМИКА, СПОРТ) Мне же в данном случае нужно вывести, только (Мировая, России, Украины)

ynovskiy

А как иначе? Это же все категории новостей. Ткнитесь в политику — Вам выведет то, что нужно.
#7 10 марта 2017 в 22:38


выводится все дерево (ПОЛИТИКА-Мировая, России, Украины, ЭКОНОМИКА, СПОРТ) Мне же в данном случае нужно вывести, только (Мировая, России, Украины)

ynovskiy

А как иначе? Это же все категории новостей. Ткнитесь в политику — Вам выведет то, что нужно.

Ris

так вы изначально и не можете выбрать подраздел Политику! можете только выбрать категорию, Новости, Объявления, Страницы итд
#8 11 марта 2017 в 00:24
Коллеги не проходим мимо, с меня пиво popcorn
#9 11 марта 2017 в 08:58
Пожалуй присоединись к просьбе ynovskiy.
Иногда действительно возникает необходимость разбить один тип контента на 2-3 изолированные группы. Пример — отделить пользовательские метки от каталога предприятий в instantMaps. Вот здесь бы и пригодился такой виджет, в котором любую категорию можно назначить корневой.
Но, к сожалению, один виджет не сильно поможет. Еще нужно скрыть "лишние" категории из списка над списком записей, из крошек и урлов, дать каждой категории (с подкатегориями) свой шаблон вывода контента, и наверное что то еще.
ynovskiy, если я правильно понял вашу идею, может быть стоит обратиться к фрилансерам?
#10 11 марта 2017 в 09:10

так вы изначально и не можете выбрать подраздел Политику! можете только выбрать категорию, Новости, Объявления, Страницы итд

Вот это не понял.
Вы просто хотите прямую ссылку на "Политику" из главного меню? Ибо здесь вы приводите не категории (которыми собираетесь манипулировать в виджете), а именно главное меню.
#11 11 марта 2017 в 09:32


так вы изначально и не можете выбрать подраздел Политику! можете только выбрать категорию, Новости, Объявления, Страницы итд

Вот это не понял.
Вы просто хотите прямую ссылку на "Политику" из главного меню? Ибо здесь вы приводите не категории (которыми собираетесь манипулировать в виджете), а именно главное меню.

Pocus

Сейчас вывод виджета категорий отображается так clip2net.com/s/3Il0xkI
либо такhttp://clip2net.com/s/3Il0Gtj в данном случае в опциях виджета стоит галочка (Показывать всё дерево категорий)
Мне же надо вывести только подразделы раздела "Политика" а именно так: clip2net.com/s/3Il0Mes
уж не знаю куда подробнее)))
#12 11 марта 2017 в 09:46

уж не знаю куда подробнее)))

ynovskiy
Ну да, я так и понял. Просто это ваше сообщение сбило с толку.
Что ж, хорошая идея. Надеюсь, вы её реализуете, с помощью сообщества или без…
#13 11 марта 2017 в 10:18
ynovskiy, файл system\controllers\content\widgets\categories\options.form.php привести к виду
  1. <?php
  2.  
  3. class formWidgetContentCategoriesOptions extends cmsForm {
  4.  
  5. public function init($options=false) {
  6.  
  7. $cats_list = array('0' => '');
  8.  
  9. if (!empty($options['ctype_id'])){
  10.  
  11. $content_model = cmsCore::getModel('content');
  12.  
  13. $ctype = $content_model->getContentType($options['ctype_id']);
  14. $cats = $content_model->getCategoriesTree($ctype['name']);
  15.  
  16. if ($cats){
  17. foreach($cats as $cat){
  18. if ($cat['ns_level'] > 1){
  19. $cat['title'] = str_repeat('-', $cat['ns_level']) . ' ' . $cat['title'];
  20. }
  21. $cats_list[$cat['id']] = $cat['title'];
  22.  
  23. }
  24. }
  25.  
  26. }
  27.  
  28. return array(
  29.  
  30. 'type' => 'fieldset',
  31. 'title' => LANG_CONTENT_TYPE,
  32. 'childs' => array(
  33.  
  34. new fieldList('options:ctype_id', array(
  35. 'generator' => function($item) {
  36.  
  37. $model = cmsCore::getModel('content');
  38. $tree = $model->getContentTypes();
  39.  
  40. $items = array(0 => LANG_WD_CONTENT_CATS_DETECT);
  41.  
  42. if ($tree) {
  43. foreach ($tree as $item) {
  44. $items[$item['id']] = $item['title'];
  45. }
  46. }
  47.  
  48. return $items;
  49.  
  50. }
  51. )),
  52.  
  53. new fieldList('options:category_id', array(
  54. 'title' => LANG_CATEGORY,
  55. 'parent' => array(
  56. 'list' => 'options:ctype_id',
  57. 'url' => href_to('content', 'widget_cats_ajax')
  58. ),
  59. 'items' => $cats_list
  60. )),
  61. )
  62. ),
  63.  
  64. 'type' => 'fieldset',
  65. 'title' => LANG_OPTIONS,
  66. 'childs' => array(
  67.  
  68. new fieldCheckbox('options:is_root', array(
  69. 'title' => LANG_WD_CONTENT_CATS_SHOW_ROOT,
  70. 'default' => false
  71. )),
  72.  
  73. new fieldCheckbox('options:show_full_tree', array(
  74. 'title' => LANG_WD_CONTENT_CATS_SHOW_FULL_TREE,
  75. 'default' => false
  76. ))
  77.  
  78. )
  79. ),
  80.  
  81. );
  82.  
  83. }
  84.  
  85. }
  86.  
файл system\controllers\content\widgets\categories\widget.php привести к виду
  1. <?php
  2. class widgetContentCategories extends cmsWidget {
  3.  
  4. public $is_cacheable = false;
  5.  
  6. public function run(){
  7.  
  8. $ctype = cmsModel::getCachedResult('current_ctype');
  9.  
  10. $model = cmsCore::getModel('content');
  11.  
  12. $ctype_id = $this->getOption('ctype_id');
  13.  
  14. $category_id = $this->getOption('category_id');
  15.  
  16. $active_cat = false;
  17.  
  18. if (!$ctype_id){
  19.  
  20. if(!$ctype){ return false; }
  21. $ctype_id = $ctype['id'];
  22.  
  23. } else {
  24. $ctype = $model->getContentType($ctype_id);
  25. }
  26.  
  27. if($ctype && $ctype['id'] == $ctype_id){
  28.  
  29. if(strpos(cmsCore::getInstance()->uri, '.html') === false){
  30.  
  31. $current_ctype_category = cmsModel::getCachedResult('current_ctype_category');
  32. if(!empty($current_ctype_category['id'])){
  33. $active_cat = $current_ctype_category;
  34. }
  35.  
  36. } else {
  37.  
  38. $item = cmsModel::getCachedResult('current_ctype_item');
  39. if(!$item){ return false; }
  40.  
  41. if(!empty($item['category'])){
  42. $active_cat = $item['category'];
  43. }
  44.  
  45. }
  46.  
  47. }
  48.  
  49. if ($category_id <= 1){
  50.  
  51. $cats = $model->getCategoriesTree($ctype['name'], $this->getOption('is_root'));
  52.  
  53. } else {
  54.  
  55. $cats = array();
  56.  
  57. $category = $model->getCategory($ctype['name'], $category_id);
  58.  
  59. if ($this->getOption('is_root')){
  60. $cats[$category_id] = $category;
  61. }
  62.  
  63. $cats = $cats + $model->getSubCategories($ctype['name'], $category_id);
  64. }
  65.  
  66. if (!$cats) { return false; }
  67.  
  68. if($active_cat){
  69.  
  70. $path = array_filter($cats, function($cat) use($active_cat){
  71. return ($cat['ns_left'] <= $active_cat['ns_left'] &&
  72. $cat['ns_level'] <= $active_cat['ns_level'] &&
  73. $cat['ns_right'] >= $active_cat['ns_right'] &&
  74. $cat['ns_level'] > 0);
  75. });
  76.  
  77. } else {
  78.  
  79. $path = !empty($category['path']) ? $category['path'] : array();
  80.  
  81. }
  82.  
  83. return array(
  84. 'ctype_name' => $ctype['name'],
  85. 'cats' => $cats,
  86. 'active_cat' => $active_cat,
  87. 'path' => (!empty($path) ? $path : array())
  88. );
  89.  
  90. }
#14 11 марта 2017 в 11:00


ynovskiy, файл system\controllers\content\widgets\categories\options.form.php привести к виду

  1.  
  2.  

Loadырь
Супер, то, что доктор прописал!!!
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.