Joomla:类别不计算子类别的文章

时间:2012-08-08 17:33:46

标签: joomla

我有菜单项“列出所有类别”。问题是,类别不计算子类别中的文章并显示0,应该计算所有子类别中的所有文章。 我无法添加图片,所以我将描述: 类别(0)  子类别1(1)  subacategory2(1)

我想,该类别将从子类别中计算文章(例如,应该是2)。

有谁知道,如何解决?

非常感谢任何帮助。

提前谢谢你。 编辑:

我正在使用2.5 Joomla。不,我不编写组件/插件/模块。 我正在使用菜单项:列出所有类别(菜单 - >主菜单 - >添加新菜单项 - >列出所有类别)。 最后,我找到了这个功能的地方。 在这里, numitems 是类别中文章的数字:

 $subQuery = ' (SELECT cat.id as id FROM #__categories AS cat JOIN #__categories AS parent ' .
        'ON cat.lft BETWEEN parent.lft AND parent.rgt WHERE parent.extension = ' . $db->quote($extension) .
        ' AND parent.published != 1 GROUP BY cat.id) ';
    $query->leftJoin($subQuery . 'AS badcats ON badcats.id = c.id');
    $query->where('badcats.id is null');

    // i for item
    if (isset($this->_options['countItems']) && $this->_options['countItems'] == 1)
    {
        if ($this->_options['published'] == 1)
        {
            $query->leftJoin(
                $db->quoteName($this->_table) . ' AS i ON i.' . $db->quoteName($this->_field) . ' = c.id AND i.' . $this->_statefield . ' = 1'
            );
        }
        else
        {
            $query->leftJoin($db->quoteName($this->_table) . ' AS i ON i.' . $db->quoteName($this->_field) . ' = c.id');
        }

        $query->select('COUNT(i.' . $db->quoteName($this->_key) . ') AS numitems');
    }

根据我的理解,我需要创建类似于$ subQuery的东西,但这次它应该从子类别中计算文章。但我不知道,怎么做; / 有什么想法吗?

1 个答案:

答案 0 :(得分:2)

Joomla!的列表所有类别仅显示该特定类别中的文章的计数,​​子类别不会计入父类别。这是因为父类别可以拥有自己的文章。

要显示类别中所有文章的总计,并且它的子类别需要修改Joomla核心com_content组件(核心文件的任何修改都应视为错误)或创建修改后的 *复制com_content组件* (效率更高,但可能比您想要的更多)或为categories视图创建视图覆盖。

使用覆盖将使页面显示更加重的计算。

如果您使用覆盖,您只需要:

  1. default_items.php/components/com_content/views/categories/tmpl/default_items.php复制到/templates/your-template/html/com_content/categories/default_items.php
  2. 修改它以计算子项目
  3. 修改它以显示总计数
  4. 2 - 计算子项目

    defined('_JEXEC') or die;行之后插入此代码:

    // Calculate number of items including sub-categories using a recursive anonymous function
    $countSubItems = function( $item ) use ( &$countSubItems ) {
        $children = $item->getChildren();
        if( count($children) == 0 ) {
            return $item->numitems;
        } else {
            $subItems = 0;
            foreach ($children as $child) {
                $subItems += $countSubItems($child);
            }
            return $subItems = $item->numitems + $subItems;
        }
    };
    

    调用计数功能

    在第二个if语句后插入行以调用count函数:

    $allItemsInclSubCats = $countSubItems($item);
    

    显示包含子类别的总数

    将回显$item->numitems;的行更改为以下内容:

    <dd><?php echo $item->numitems; ?> ( <?php echo $allItemsInclSubCats; ?> including sub-categories )</dd>