我有菜单项“列出所有类别”。问题是,类别不计算子类别中的文章并显示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的东西,但这次它应该从子类别中计算文章。但我不知道,怎么做; / 有什么想法吗?
答案 0 :(得分:2)
Joomla!的列表所有类别仅显示该特定类别中的文章的计数,子类别不会计入父类别。这是因为父类别可以拥有自己的文章。
要显示类别中所有文章的总计,并且它的子类别需要修改Joomla核心com_content
组件(核心文件的任何修改都应视为错误)或创建修改后的 *复制com_content组件* (效率更高,但可能比您想要的更多)或为categories
视图创建视图覆盖。
使用覆盖将使页面显示更加重的计算。
如果您使用覆盖,您只需要:
default_items.php
从/components/com_content/views/categories/tmpl/default_items.php
复制到/templates/your-template/html/com_content/categories/default_items.php
和在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>