【问题标题】:Joomla: categories do not count articles from sub-categoriesJoomla:类别不计算子类别中的文章
【发布时间】:2012-08-08 17:33:45
【问题描述】:

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

【问题讨论】:

  • 如果您正在为 Joomla 编写组件/模块/插件!您需要发布相关代码以便我们提供帮助。您还需要告诉我们是哪个版本的 Joomla!。
  • 你好,我更新了问题。希望对您有所帮助。
  • Joomla 的哪个版本! 2.5 你用的是 2.5.1、2.5.2、2.5.3、2.5.4 还是 2.5.6?
  • 2.5.0 存在大量安全漏洞,您确实应该升级。

标签: joomla


【解决方案1】:

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 语句之后插入调用计数函数的行:

$allItemsInclSubCats = $countSubItems($item);

显示包括子类别的总数

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

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

【讨论】:

  • 您好,感谢您的详细解释。但是,它不起作用。
  • 您好,感谢您的详细解释。但是,它不起作用。请检查它的外观:tinypic.com/r/2ilc9s6/6 我添加了 2 - 计算子项并显示组件/com_content/views/categories/tmpl/default_items.php 中的子类别的总数,如您所建议的。 $allItemsInclSubCats 是什么?这个变量在哪里描述?我试图写 $countSubItems(出错)和 $subItems(保持不变)而不是 $countSubItems。你有什么想法?提前谢谢你,你很友善。
  • 您修改了核心文件,这不是我所建议的。查看我编辑的答案,我错过了一行。
  • 太棒了,工作就像一个魅力!但我还想要一件事。查看当前情况的图片:i46.tinypic.com/2e58b4y.jpg 我想要,对于父类别仅显示包含子类别的文章,对于子类别仅显示他们自己的文章。所以我希望它是:Olandija (2) -Edinburgas(1) -Amsterdamas(1) 等等。你认为,有可能以某种方式吗?或者另一种隐藏父类别的文章数字的可能性,它可以是:Olandija(2) -Edinburgas 1 (1) -Amsterdamas 1 (1) 但第一个变体更好。非常感谢
  • 当我发布时,我发现它可能不清楚。 Olandija 是父类别,Edinburgas 和 Amsterdamas 是子类别。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-10
  • 2012-02-24
  • 1970-01-01
  • 2021-12-22
  • 2014-10-03
  • 1970-01-01
相关资源
最近更新 更多