Блок Concrete5 Autonav Получить число потомков

Я делаю собственный шаблон для блока autonav Concrete5 и мне интересно, есть ли способ получить общее количество потомков (детей, внуков и т. Д.) Для каждого конкретного элемента навигации? Например, получите потомков для навигации верхнего уровня, чтобы показать общее количество страниц, которые являются потомками под каждым:

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

Блок Autonav предоставляет плоский массив объектов (представляющих каждую страницу), и у каждого объекта есть идентификатор для его родителя, но я не могу обернуть голову циклом и создать массив для многоуровневой навигации.

Предлагает ли Concrete5 метод для этого или мне нужно выяснить, как построить цикл, извлекающий эту информацию?

Я по сути ищу функциональность этого нить (к сожалению, они не отвечают на вопрос)

1

Решение

Важный!

Не забудьте скопировать содержимое с

/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:

введите описание изображения здесь

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector