1

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

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

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

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

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

4

1 回答 1

1

重要的!

不要忘记复制内容

/concrete/blocks/autonav/

进入

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

并在那里进行这些更改。否则他们将在下一次系统更新时消失!


As a$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();也可以获取系统页面。我不认为这是你想要的。


至于您的评论“似乎也引入了系统页面”,这取决于您是否决定在 Auto-Nav 块中显示它们:

在此处输入图像描述

于 2016-07-12T16:36:41.837 回答