Новости Joomla

0 Пользователей и 1 Гость просматривают эту тему.
  • 2 Ответов
  • 2815 Просмотров
*

rain_heart

  • Новичок
  • 4
  • 1 / 0
Возникла такая необходимость в модуле ZOO Category показывать не только категории а еще заголовки элементов. Немного изменил модуль и все заработало.
Версия Zoo 3.1
Версия Joomla 3.3.0


1. Добавляем строчку в файл: administrator/language/en-GB/en-GB.com_zoo.ini

Код: ini
SHOW_ITEMS_DESCRIPTION="If set to yes, it will show the elements from category"
я добавил после строчки
Код: ini
SHOW_ITEM_COUNT_DESCRIPTION="If set to yes, it will show the number of items present in the category"

это дескриптор для будущей радиокнопки (вкл/выкл показ элементов)

2. Добавляем в файл: modules/mod_zoocategory/mod_zoocategory.xml в раздел <fieldset></fieldset>
Код: xml
<field name="add_items" type="radio" default="0" label="Show elements in category" description="SHOW_ITEMS_DESCRIPTION">
     <option value="1">JYES</option>
     <option value="0">JNO</option>
</field>[/color]
это радиокнопка в настройках модуля Zoo Category

3. Добавляем в файл: modules/mod_zoocategory/helper.php кусочек кода
Код: php
if ($params->get('add_items', 0)) {
   if ($category->getItems()) {
      $result[] = "<ul $attribs>";
      $arr_items = $category->getItems();
      foreach ($arr_items as $currentitem) {
        $url = $this->app->route->item($currentitem, true);
        $result[] = "<li$class>";
        $result[] = "<a href=\"$url\"$class><span>{$currentitem->name}</span></a>";
         $result[] = '</li>';
      }
      $result[] = '</ul>';
    }
}

!этот кусочек надо добавить после кода!
Код: php
if ($params->get('add_count', 0)) {
     $result[] = "<a href=\"$url\"$class><span>{$category->name} ({$category->itemCount()})</span></a>";
} else {
      $result[] = "<a href=\"$url\"$class><span>{$category->name}</span></a>";
}

В результате можно выводить не только список категорий и подкатегорий но еще и список элементов категорий со ссылками на них.
P.S. Я не волшебник, я только учусь поэтому комментарии от гуру приветствуются, возможно это можно было сделать более изящней.
*

rain_heart

  • Новичок
  • 4
  • 1 / 0
UPD!

Посмотрел внимательно код: modules/mod_zoocategory/helper.php
обнаружил
строчку (у меня 37)
Код: php
$parent = $category->hasChildren() && !($max_depth && $max_depth < $depth + 1));

надо заменить на строку
Код: php
$parent = ($category->hasChildren() && !($max_depth && $max_depth < $depth + 1)) || ($category->getItems());

она добавляет в класс значение ' parent' для категории в которой есть элементы.

Так как дальше собираюсь сделать завернуть список категорий в аккордеон меню, кажется это правильно.
*

rain_heart

  • Новичок
  • 4
  • 1 / 0
UPD 2.0

В приложенном выше коде получается что элементы директорий будут всегда отображаться в независимости активная директория или нет это при использовании темы "warp6-sidebar-menu"
чтоб это исправить надо немного изменить условие в строке

вот это
Код: php
if ($category->getItems()) {
...
}

меняем на это
Код: php
if ($category->getItems() && $active) {
...
}


в результате получаем вот такой полный код в modules/mod_zoocategory/helper.php

Код: php
<?php
/**
* @package   ZOO Category
* @author    YOOtheme http://www.yootheme.com
* @copyright Copyright (C) YOOtheme GmbH
* @license   http://www.gnu.org/licenses/gpl-2.0.html GNU/GPLv2 only
*/

/*
Class: CategoryModuleHelper
The category module helper class
*/
class CategoryModuleHelper extends AppHelper {

    public function render($category, $params, $level = 0, $flat = false, $attribs = null, $expanded = false) {

// init vars
$menu_item = $params->get('menu_item');
$max_depth = (int) $params->get('depth', 0);
if (!$current_id = (int) $this->app->request->getInt('category_id', $this->app->system->application->getParams()->get('category'))) {
if ($item = $this->app->table->item->get((int) $this->app->request->getInt('item_id', $this->app->system->application->getParams()->get('item_id', 0)))) {
$current_id = $item->getPrimaryCategoryId();
}
}

$result = array("<ul $attribs>");
foreach ($category->getChildren($flat ? true : false) as $category) {

$path = array_reverse($category->getPath());
$depth = count(array_slice($path, array_search($params->get('category', 0), $path))) - 1;
if ($max_depth && $max_depth < $depth) {
continue;
}

$current = $current_id == $category->id;
$active = $current || in_array($current_id, array_keys($category->getChildren(true)));
$parent = ($category->hasChildren() && !($max_depth && $max_depth < $depth + 1)) || ($category->getItems());
$url = $this->app->route->category($category, true, $menu_item);
$class = ' class="'.($flat ? '' : 'level'.$level).($parent ? ' parent' : '').($current ? ' current' : '').($active ? ' active' : '').'"';

$result[] = "<li$class>";
           
           if ($params->get('add_count', 0)) {
$result[] = "<a href=\"$url\"$class><span>{$category->name} ({$category->itemCount()})</span></a>";
                   
} else {
$result[] = "<a href=\"$url\"$class><span>{$category->name}</span></a>";
}
           
           
            /* Вывод элементов категории   */
             if ($params->get('add_items', 0)) {
                if ($category->getItems() && $active) {
                    $result[] = "<ul $attribs>";
                    foreach ($category->getItems() as $currentitem) {
                        $url = $this->app->route->item($currentitem, true);
                        $result[] = "<li$class>";
                        $result[] = "<a href=\"$url\"$class><span>{$currentitem->name}</span></a>";
                        $result[] = '</li>';
                    }
                    $result[] = '</ul>';
                }
             }
           
if (!$flat && ($active || $expanded) && $parent) {
$result[] = $this->render($category, $params, $level+1, $flat, 'class="level'.($level+1).'"', $expanded);
}
$result[] = '</li>';

}
$result[] = '</ul>';

return implode("\n", $result);
}

}
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Дополнительное поле с редактором для категории. Zoo

Автор rch.sergeevich

Ответов: 1
Просмотров: 1326
Последний ответ 22.05.2022, 08:12:16
от arma
Error!-Error-Reordering Category (invalid slug)

Автор sig_

Ответов: 2
Просмотров: 2741
Последний ответ 27.11.2020, 08:59:35
от vasmed
Вывод материала категории

Автор face2005

Ответов: 0
Просмотров: 2106
Последний ответ 28.09.2018, 18:26:52
от face2005
[Решено] Как в модуле ZOO Item вывести название и описание категории?

Автор frolov.ar

Ответов: 13
Просмотров: 4617
Последний ответ 01.04.2017, 13:29:52
от rivermc
URL нескольких страниц категории

Автор saschka

Ответов: 2
Просмотров: 2000
Последний ответ 08.02.2017, 13:45:36
от saschka