Concrete5 Autonav Block获取后代数量

时间:2016-07-12 15:10:14

标签: php concrete5 concrete5-5.7

我正在为Concrete5 autonav块做一个自定义模板,我想知道是否有办法获得每个特定导航项的后代(子,孙等)的总数?例如,获取顶级导航的后代以显示每个后代的页面总数:

Tutorials (33)
Freebies (25)
Lesson Plans (10)

Autonav块提供了一个平面的对象数组(代表每个页面),每个对象都有一个父级的ID,但我无法绕过循环并为多级导航构建一个数组。

Concrete5是否为此提供了一种方法,或者我是否需要弄清楚如何构建一个提取此信息的循环?

我基本上在寻找这个thread 的功能(不幸的是他们没有回答这个问题)

1 个答案:

答案 0 :(得分:1)

重要!

不要忘记复制

中的内容

/concrete/blocks/autonav/

/application/blocks/autonav/(如有必要,请创建文件夹blocksautonav

并在那里做这些改变。否则他们将继续进行下一次系统更新!

由于$navItem具有以下属性:

  

$ navItem-> cID:此导航项的页面的集合ID   代表

向控制器添加方法(虽然这很简单):

public function getChildPagesFromID($cID)
{
    $db = Database::connection();
    $r = $db->query(
            "select cID from Pages where cParentID = ? order by cDisplayOrder asc",
            array($cID));
    $pages = array();
    while ($row = $r->fetchRow()) {
        $pages[] = Page::getByID($row['cID'], 'ACTIVE');
    }

    return sizeof($pages);
}

然后您可以在view.php

中执行此操作
// Existing code:
if (count($navItems) > 0) {
    echo '<ul class="nav">'; //opens the top-level menu

    foreach ($navItems as $ni) {
        echo '<li class="' . $ni->classes . '">';

<li>标记内添加此内容:

echo $controller->getChildPagesFromID($ni->cID);

论坛中建议的$ni->cObj->getNumChildren();也会获得系统页面。我不认为这是你想要的。

至于你的评论“似乎也引入了系统页面”,这取决于你是否决定在自动导航模块中显示它们:

enter image description here