Я делаю собственный шаблон для блока autonav Concrete5 и мне интересно, есть ли способ получить общее количество потомков (детей, внуков и т. Д.) Для каждого конкретного элемента навигации? Например, получите потомков для навигации верхнего уровня, чтобы показать общее количество страниц, которые являются потомками под каждым:
Tutorials (33)
Freebies (25)
Lesson Plans (10)
Блок Autonav предоставляет плоский массив объектов (представляющих каждую страницу), и у каждого объекта есть идентификатор для его родителя, но я не могу обернуть голову циклом и создать массив для многоуровневой навигации.
Предлагает ли Concrete5 метод для этого или мне нужно выяснить, как построить цикл, извлекающий эту информацию?
Я по сути ищу функциональность этого нить (к сожалению, они не отвечают на вопрос)
Важный!
Не забудьте скопировать содержимое с
/concrete/blocks/autonav/
в
/application/blocks/autonav/
(Создайте папки blocks
а также autonav
если необходимо)
и сделайте эти изменения там. В противном случае они исчезнут при следующем обновлении системы!
Как $navItem
имеет следующее свойство:
$ navItem-> cID: идентификатор коллекции страницы этого элемента навигации
представляет собой
Добавьте метод к контроллеру (это быстрый способ):
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:
Других решений пока нет …