Joomla:类别不计算子类别中的文章
我有菜单项“列出所有类别”。问题是,类别不计算子类别中的文章并显示为0,应该计算所有子类别中的所有文章。 我无法添加图片,因此我将描述: 类别(0) 子类别1(1) 子类别2(1) 我想,该类别将统计子类别中的文章(在示例中应为2) 有人知道怎么修吗 非常感谢您的帮助 先谢谢你。 编辑: 我使用的是2.5 Joomla。不,我不写组件/插件/模块。 我正在使用菜单项:列出所有类别(菜单->主菜单->添加新菜单项->列出所有类别)。 最后,我找到了描述这个函数的地方。 此处,numitems是类别中文章的数字:Joomla:类别不计算子类别中的文章,joomla,Joomla,我有菜单项“列出所有类别”。问题是,类别不计算子类别中的文章并显示为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的内容,但这次应该从子类别中计算文章。但我不知道该怎么做/
有什么想法吗?乔姆拉s List All Categories将仅显示该特定类别中的文章计数。子类别将不在父类别中计数。这是因为父类别可以有自己的文章 要显示一个类别及其子类别中所有文章的总数,需要修改Joomla core
com\u内容组件(对核心文件的任何修改都应视为错误),或者创建一个修改后的*复制com\u内容组件*(这将更有效,但可能比您想要的更费力)或为类别
视图创建视图覆盖
使用覆盖将使页面在计算方面显示得更重
如果使用覆盖,您需要做的就是:
将default\u items.php
从/components/com\u content/views/categories/tmpl/default\u items.php
复制到/templates/your template/html/com\u content/categories/default\u items.php
和
修改它以计算子项
修改它以显示总计数
2-计算分项
在定义的(''u JEXEC')或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;
}
};
调用count函数
在第二条if
语句后插入调用count函数的行:
$allItemsInclSubCats = $countSubItems($item);
显示总计,包括子类别
将echo的$item->numitems;
行更改为如下内容:
<dd><?php echo $item->numitems; ?> ( <?php echo $allItemsInclSubCats; ?> including sub-categories )</dd>
(包括子类别)
如果您正在为Joomla编写组件/模块/插件!您需要发布相关代码,以便我们提供帮助。您还需要告诉我们Joomla的哪个版本。您好,我更新了问题。希望有帮助。您使用的Joomla!2.5的哪个版本是2.5.1、2.5.2、2.5.3、2.5.4还是2.5.6?2.5.0存在大量安全漏洞,您确实应该升级。您好,感谢您的全面解释。但是,它不起作用。您好,感谢您的全面解释。但是,它不起作用。请检查它的外观:我添加了2个计数子项,并按照您的建议在components/com_content/views/categories/tmpl/default_items.php中显示包含子类别的总数。什么是$allItemsInclSubCats?whe是否描述了此变量?我尝试写入$countSubItems(给定错误)和$subItems(保持不变)取而代之的是$countSubItems。你有什么想法吗?提前谢谢你,你很好。你修改了你的核心文件,这不是我的建议。请看我编辑的答案,我漏了一行。太好了,工作得很有魅力!但我仍然想要一件事。查看当前情况的图片:我想要,对于父类别,只显示包括子类别和子类别只显示他们自己的文章。所以我希望它是:奥兰迪亚(2)-爱丁堡(1)-阿姆斯特丹(1)等等。你认为有什么可能?或者另一种可能隐藏父类别的文章数字,它可以是:奥兰迪亚(2)-爱丁堡(1)-阿姆斯特丹(1)但第一个变体更好。非常感谢。当我发布时,我发现它可能不清楚。Olandija是父类别,爱丁堡和阿姆斯特丹是子类别。谢谢。