Доработка виджета - Категории

Скрываем пустые папки

#1 6 августа 2014 в 15:04
Всем привет.
Решил для себя, делюсь со всеми.
Имею большую, разветвленную структуру контента, причем большая часть папок забита на перспективу, т.е. без содержимого. Пользователю не удобно, ну а все не нужные отключать не с руки. Решил скрыть.

Работаем с тремя файлами:
1. /system/controllers/content/model.php
2. /system/controllers/content/widgets/categories/widget.php
3. /templates/{ваш шаблон}/controllers/content/widgets/categories/categories.tpl.php

Так как у меня все фалы изрыты экспериментами прикреплять их не буду, дело там не большое дешевле описать.
model.php:
Из стандартного набора подобная функция мне не по глазам, рисую свою.
  1.  
  2. public function CountItemsInFolder($ctype_name,$parent_id){
  3. $category = $this->getCategory($ctype_name,$parent_id);
  4. $this->filterCategory($ctype_name, $category, 1);
  5. $this->filterEqual('is_pub',1);
  6. $count = $this->getContentItemsCount($ctype_name);
  7. $this->resetFilters();
  8. return $count;
  9. }
  10.  
widget.php:
Перед строкой "return array(" собираем инфо о наличии вложенного материала.
  1.  
  2. foreach($cats as $id=>$cat){
  3. $items[$id] = $model->CountItemsInFolder($ctype_name,$id);
  4. }
  5.  
И добавляем переменную в массив для дальнейшего использования в шаблоне.
  1.  
  2. return array(
  3. ...
  4. 'items' => $items,
  5. );
  6.  
categories.tpl.php
Используем дефолтное условие по срытию папок.
  1.  
  2. ищем:
  3. <?php if (!$is_visible) { ?>
  4. расширяем условие:
  5. <?php if (!$is_visible || !$items[$id]) { ?>
  6.  
Результат: на экране только те категории, в которых есть опубликованные записи.
Удачи.
#2 2 сентября 2020 в 04:42
PIN, я так понимаю, инструкция устарела за 6 лет?
Ну, и плюс вопрос: по хорошему и в сайтмапе нужно перестать ссылаться на эти категории и/или в идеале еще в шаблоне на страницах таких категорий noindex заюзать )
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.