Фильтр по категории в фильтре записей типов контента 2.X

1597
Фильтр по категории в фильтре записей типов контента




Править будем файл templates/ваш шаблон/ui/filter-panel.tpl.php

1

Перед:
Код PHP:
  1. <div class="filter-panel gui-panel <?php echo $css_prefix;?>-filter">
Добавим:
Код PHP:
  1.  
  2. <?php
  3. $core = cmsCore::getInstance();
  4. $uri = $core->uri;
  5. $current_controller = $core->controller;
  6. $current_ctype = $core->request->get('ctype_name');
  7. $current_slug = $core->request->get('slug');
  8. $is_category_view = $current_controller=='content' && !empty($current_ctype) && !mb_strstr($uri, '.html') && $current_slug ? true : false;
  9.  
  10. if(!empty($current_ctype)){
  11. $cats = cmsCore::getModel('content')->getCategoriesTree($current_ctype);
  12.  
  13. if ($cats){
  14. foreach($cats as $cat){
  15. if($cat['id']==1){
  16. $cat['title'] = 'Все категории';
  17. }
  18. if ($cat['ns_level'] > 1){
  19. $cat['title'] = str_repeat('-', $cat['ns_level']) . ' ' . $cat['title'];
  20. }
  21. $cats_list[$cat['slug']] = $cat['title'];
  22.  
  23. }
  24. }
  25. $current_category = $is_category_view ? $current_slug : '';
  26. }
  27. ?>
  28.  

2

Сразу после:
Код PHP:
  1. <div class="fields">
Добавим:
Код PHP:
  1.  
  2. <?php if(!empty($current_ctype) && !empty($cats_list)){ ?>
  3. <div class="field ft_category_id">
  4. <div class="title">Категория</div>
  5. <div class="value form-group">
  6. <?php echo html_select('category_id', $cats_list, $current_category, array('class'=>'form-control','id'=>'ft_category_id')); ?>
  7. </div>
  8. </div>
  9. <?php } ?>
  10.  

3

Найдём две строки:
Код PHP:
  1.  
  2. <div class="buttons">
  3. <?php echo html_submit(LANG_FILTER_APPLY); ?>
  4.  
Заменим на:
Код PHP:
  1.  
  2. <div class="buttons" id="filter_form_buttons">
  3. <?php echo html_submit(LANG_FILTER_APPLY, 'submit', array('class'=>'btn-submit')); ?>
  4.  

4

В самом конце файла добавим:
Код PHP:
  1.  
  2. <?php if(!empty($current_ctype) && !empty($cats_list)){ ?>
  3. <script>
  4.  
  5. $('.btn-submit','#filter_form_buttons').click(function() {
  6.  
  7. $target = $(this);
  8. $parent = $target.closest('#filter_form_buttons');
  9. $form = $parent.closest('form');
  10. $cats_list = $('#ft_category_id',$form);
  11. $cat_slug = $cats_list.val();
  12.  
  13. $form.attr('action','/<?php echo $current_ctype; ?>/'+$cat_slug);
  14. $form.submit();
  15.  
  16. });
  17.  
  18. </script>
  19. <?php } ?>
  20.  
Поле Иконка для пунктов Меню | Полезное из ББШ :: Заголовок для объединённых виджетов
Комментарии (12)
Алексей Тимофеев 23 февраля 2017 в 03:15 +4
small user social cms
В релиз надо такое+
Alexprofi 23 февраля 2017 в 11:42 +3
small user social cms
Это точно!
Pasechnik 23 февраля 2017 в 12:53 +2
small user social cms
В релиз! Молодец Денис Васильевич!
WebMan 24 февраля 2017 в 06:35 0
small user social cms
Полезная штука, поставил себе на сайт. Спасибо!

Чтобы этот хак включить в релиз, нужно ещё добавить опцию "Выводить список категорий в фильтре" в настройках типов контента.
Денис Васильевич, может добавите такую опцию и закинете пул-реквест на Гит?
Денис Васильевич 24 февраля 2017 в 12:30 0
small user social cms
Это же очередной костыль.
Это дело надо в модель встраивать, при формировании формы фильтра.
WebMan 24 февраля 2017 в 12:44 0
small user social cms
Если это сделать правильно и в соответствием с соглашением по коду, сделать это опциональным, то есть большая вероятность включения такой полезной вещи в коробку. Тогда "костыль" станет очередным улучшением движка. И проще всего это сделать через пул на Гите.
Денис Васильевич 24 февраля 2017 в 13:43 0
small user social cms
Я делаю как умею но понимаю, что по хорошему надо делать это иначе. Если разработчики сочтут нужным добавить этакое то сделают это, для них это маленькая задача.
п.с. Делать этакое и по правилам это скорее ваша задача )) , вы больше понимаете в коде. Я больше дизайнер, и сделать что-то по правилам для меня большая задача.
Pasechnik 26 февраля 2017 в 07:14 0
small user social cms
Денис Васильевич сейчас категории в фильтре выводятся примерно в таком виде:
Код PHP:
  1.  
  2. <option value="">Категория</option>
  3. <option value="">-- Подкатегория</option>
  4. <option value="">-- Подкатегория</option>
  5. <option value="">Категория</option>
  6. <option value="">-- Подкатегория</option>
  7. <option value="">-- Подкатегория</option>
  8.  
Как сделать с тегом label, как это реализовано в выборе категории при добавлении новости:
Код PHP:
  1.  
  2. <optgroup label="Категория">
  3. <option value="">- Подкатегория</option>
  4. <option value="">- Подкатегория</option>
  5. </optgroup>
  6. <optgroup label="Категория">
  7. <option value="">- Подкатегория</option>
  8. <option value="">- Подкатегория</option>
  9. </optgroup>
  10.  
Подцепил к фильтру chosen, не получается выделить родительские категории. sad
Pasechnik 27 февраля 2017 в 04:03 0
small user social cms
Решил сам.
Jestik 27 февраля 2017 в 09:20 +1
small user social cms
Правилом хорошего тона, принято делиться решением)
Pasechnik 27 февраля 2017 в 13:18 0
small user social cms
Я не кодер, решение безобразное. facepalm
Хотелось бы увидеть решение от Дениса Васильевича, но увы.
Рачей 6 мая 2018 в 18:05 +1
small user social cms
Такишо, в релиз 2.10 это не попало? А вещь нужная я вам скажу..