1

我有菜单项“列出所有类别”。问题,类别不计算子类别中的文章并显示 0,应该计算所有子类别中的所有文章。我不能添加图片,所以我将描述:Category (0) subcategory1 (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 的内容,但这次它应该计算来自子类别的文章。但我不知道该怎么做;/有什么想法吗?

4

1 回答 1

2

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

要显示一个类别及其子类别中所有文章的总数,需要修改 Joomla 核心com_content组件(对核心文件的任何修改都应该被认为是错误的)或创建一个修改后的*copy 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. 修改它以显示总计数

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);

显示包括子类别的总数

将 echo 的行更改为$item->numitems;如下所示:

<dd><?php echo $item->numitems; ?> ( <?php echo $allItemsInclSubCats; ?> including sub-categories )</dd>
于 2012-08-11T05:46:14.180 回答