こちらです。
http://pastebin.com/pbmHKy2R
よろしくお願いいたします。
Re: Re: 特定のページだけオートナビなどを使ってメニューに表示する方法
2014年3月4日 at 16:10
たびたびすみません。
下記のように、階層を維持した状態で表示させたいのです。
○サイトマップ
ホーム
┣ p1
┃┣ p1-1
┃┗ p1-2
┣ p2
┣ p3
┗ p4
┣ p4-1
┗ p4-2
○オートナビで表示させたいページ
メニューAの場合
p1
┗ p1-1
p3
p4
┣ p4-1
┗ p4-2
メニューBの場合
p2
p4
┣ p4-1
┗ p4-2
メニューによって表示させたいページが違うので、「ナビから除く」属性ではなく、
自作した属性でしぼり込めないかどうかと思いました。
(メニューAの場合)
'menu_a'という属性を自作し表示したいページにチェック。
menuA用のカスタムテンプレートに
下記の記述を足す事で絞り込む事は可能になりました。
if($ni->cObj->getAttribute('menu_a')){
しかし、下記のように閉じタグが出力されず、どんどん入れ子になっていってしまいます。
p1
┗ p1-1
┣ p3
┗ p4
┣ p4-1
┗ p4-2
出力結果
<ul>
<li>p1
<ul class="sub">
<li>p1-1
<ul class="sub">
<li>p3</li>
<li>p4
<ul class="sub">
<li>p4-1</li>
<li>p4-2</li>
</li>
</ul>
いまのバージョンでは実現不可なのでしたらあきらめたいと思います。
タグ:
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
いろいろとありがとうございます。
書いていただいたテンプレートの通りだと、
オリジナルの属性をチェックしたページの下層ページがナビから表示されなくなりました。
下層ページだけでなく、オリジナルの属性をチェックしたページ自体も非表示にするために
を
に変更しました。
!を取るとやはり階層表示できなくなるようですので、
ページ属性にチェックが入っている場合、表示するという風には現状できないということで納得いたしました。
なので「メニューAに含む」ではなく「メニューAに含まない」属性で進めたいと思います。
どうもありがとうございました。
書いていただいたテンプレートの通りだと、
オリジナルの属性をチェックしたページの下層ページがナビから表示されなくなりました。
下層ページだけでなく、オリジナルの属性をチェックしたページ自体も非表示にするために
if (!$exclude_page) {
を
if (!$exclude_page && !$exclude_subpages) {
に変更しました。
!を取るとやはり階層表示できなくなるようですので、
ページ属性にチェックが入っている場合、表示するという風には現状できないということで納得いたしました。
なので「メニューAに含む」ではなく「メニューAに含まない」属性で進めたいと思います。
どうもありがとうございました。
Your post has been saved and will be published after approval by the forum moderator.
takuro hishikawa
Re: 特定のページだけオートナビなどを使ってメニューに表示する方法