Re: 特定のページだけオートナビなどを使ってメニューに表示する方法

2014年3月4日 at 17:32

こちらです。
http://pastebin.com/pbmHKy2R
よろしくお願いいたします。

タグ:

Re: 特定のページだけオートナビなどを使ってメニューに表示する方法

2014年3月4日 at 18:28
こんな感じでオリジナルの属性をチェックしたページがナビから表示されなくなります。

<?php defined('C5_EXECUTE') or die("Access Denied.");

$navItems = $controller->getNavItems();

foreach ($navItems as $ni) {
$classes = array();

if ($ni->isCurrent) {
$classes[] = 'current';
}

if ($ni->inPath) {
$classes[] = 'nav-path-selected';
}

$ni->classes = implode(" ", $classes);
}

echo '<ul class="nav">'; //opens the top-level menu

$exclude_children_below_level = 9999;

foreach ($navItems as $ni) {

$exclude_subpages = $ni->cObj->getAttribute('exclude_subpages_from_menu_a');

$current_level = $ni->level;
if ($current_level > $exclude_children_below_level) {
$exclude_page = true;
} else {
$excluded_parent_level = 9999;
$exclude_children_below_level = $exclude_subpages ? $current_level : 9999;
$exclude_page = false;
}

if (!$exclude_page) {

echo '<li class="' . $ni->classes . '">'; //opens a nav item

echo '<a href="' . $ni->url . '" target="' . $ni->target . '" class="' . $ni->classes . '">' . $ni->name . '</a>';

if (!$exclude_subpages) {
if ($ni->hasSubmenu) {
echo '<ul class="sub">'; //opens a dropdown sub-menu
} else {
echo '</li>'; //closes a nav item
echo str_repeat('</ul></li>', $ni->subDepth); //closes dropdown sub-menu(s) and their top-level nav item(s)
}
}

}
}

echo '</ul>'; //closes the top-level menu
 

Re: Re: 特定のページだけオートナビなどを使ってメニューに表示する方法

2014年3月4日 at 19:19
いろいろとありがとうございます。
書いていただいたテンプレートの通りだと、
オリジナルの属性をチェックしたページの下層ページがナビから表示されなくなりました。

下層ページだけでなく、オリジナルの属性をチェックしたページ自体も非表示にするために
if (!$exclude_page) {


if (!$exclude_page && !$exclude_subpages) {

に変更しました。

!を取るとやはり階層表示できなくなるようですので、
ページ属性にチェックが入っている場合、表示するという風には現状できないということで納得いたしました。

なので「メニューAに含む」ではなく「メニューAに含まない」属性で進めたいと思います。

どうもありがとうございました。