Concrete5 Autonav 块获取后代数
Concrete5 Autonav Block Get Number of Descendants
我正在为 Concrete5 自动导航块制作自定义模板,想知道是否有办法获取每个特定导航项的后代(子代、孙代等)的总数?例如,获取顶级导航的后代以显示每个页面下的后代页面总数:
Tutorials (33)
Freebies (25)
Lesson Plans (10)
Autonav 块提供了一个平面对象数组(代表每个页面),每个对象都有一个父对象 ID,但我无法绕过循环并为多级导航构建数组。
Concrete5 是否为此提供了一种方法,或者我是否需要弄清楚如何构建一个提取此信息的循环?
我基本上是在寻找这个thread的功能(不幸的是他们没有回答这个问题)
重要!
别忘了从
复制内容
/concrete/blocks/autonav/
进入
/application/blocks/autonav/
(如有必要,创建文件夹 blocks
和 autonav
)
并在那里进行这些更改。否则他们将在下次系统更新时消失!
作为 $navItem
具有以下 属性:
$navItem->cID : collection id of the page this nav item
represents
向控制器添加一个方法(虽然这是一个快速的过程):
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();
也会获取系统页面。我不认为这是你想要的。
至于您的评论 "seems to bring in System pages too" 这取决于您是否决定在自动导航块中显示它们:
我正在为 Concrete5 自动导航块制作自定义模板,想知道是否有办法获取每个特定导航项的后代(子代、孙代等)的总数?例如,获取顶级导航的后代以显示每个页面下的后代页面总数:
Tutorials (33)
Freebies (25)
Lesson Plans (10)
Autonav 块提供了一个平面对象数组(代表每个页面),每个对象都有一个父对象 ID,但我无法绕过循环并为多级导航构建数组。
Concrete5 是否为此提供了一种方法,或者我是否需要弄清楚如何构建一个提取此信息的循环?
我基本上是在寻找这个thread的功能(不幸的是他们没有回答这个问题)
重要!
别忘了从
复制内容/concrete/blocks/autonav/
进入
/application/blocks/autonav/
(如有必要,创建文件夹 blocks
和 autonav
)
并在那里进行这些更改。否则他们将在下次系统更新时消失!
作为 $navItem
具有以下 属性:
$navItem->cID : collection id of the page this nav item represents
向控制器添加一个方法(虽然这是一个快速的过程):
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();
也会获取系统页面。我不认为这是你想要的。
至于您的评论 "seems to bring in System pages too" 这取决于您是否决定在自动导航块中显示它们: