2016-07-12 2 views
1

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

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

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

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

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

ответ

1

Внимание!

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

/concrete/blocks/autonav/

в

/application/blocks/autonav/ (Создание папки blocks и autonav при необходимости)

и сделать эти changements там. В противном случае они исчезнут при следующем обновлении системы!


В $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> Tag:

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

В $ni->cObj->getNumChildren(); как предложено в форуме получает страницы системы тоже. Я не думаю, что это то, что вы хотите.


Что касается Вашего комментария «кажется, приносит в системных страниц тоже» что зависит, если вы решили показать их в блоке Auto-Nav:

enter image description here

+0

Поправьте меня, если я m неправильно, но похоже, что только генерирует количество дочерних страниц для текущей страницы, а не для каждой страницы на верхнем уровне навигации? EDIT: только что протестирован, и это для текущей страницы, и, похоже, тоже приносит страницы System. Извините, возможно, мой вопрос не ясен: мне интересно, есть ли способ генерировать все детские страницы с верхнего уровня. – jonkratz

+0

А я вижу, подождите, я проверю это –

+0

Отредактировал свой ответ –

Смежные вопросы