オートナビから特定ページのみ除くについて

2014年6月19日 at 16:05

いつもお世話になります。

Ver. 5.6.3.1

新たな属性を作りexclude_navを変更したカスタムテンプレートを
作る方法で出来ていたものがあるのですが
最後に表示される<li>にlastのclassをつけたいと思って
色々試していたのですが思うようにいってくれません。

最新のautonavをチェックしてみると結構変わっていてこの最新版では
コメントアウトすることで簡単に色々と出来そうなのでこの最新版で対応したいと思っています。
ヘッダーやフッター、サイトマップから外したいといったように結構多用しているので
何か方法がありましたらご教授いただけると嬉しく思います。

よろしくお願いします。

タグ:

Re: オートナビから特定ページのみ除くについて

2014年6月19日 at 21:14
取り急ぎ・・・。

質問は、「オートナビを除く」の属性の使い方についてでしょうか。

それとも、クラスのことを質問されているのでしょうか。
おそらく、クラスであると思われますので・・・

view.php のところにあるように、
Last なんとかというクラスを与えるところのコードを有効にすると、
オートナビの最後の <li> にそのクラスが与えられます。

誰か補足をお願いします〜。取り急ぎ、失礼します。
 

Re: オートナビから特定ページのみ除くについて

2014年6月23日 at 17:18
返信ありがとうございます。
現在使っているカスタムテンプレートのファイルを添付してみました。
ヘッダーのナビ用に使っています。
この他に、フッターナビ用に exclude_globalnav を exclude_footernav に変えたものや
サイトマップ用など用意してあります。

最新のview.phpを確認すると、

if ($ni->isLast) {
//class for the last item in each menu section (last top-level item, and last item of each dropdown sub-menu)
$classes[] = 'nav-last';
}

この分がコメントアウトされていてこのコメントアウトを外すと一番最後の<li>にnav-lastが付きます。
これと同じようなことが現在のもので簡単に出来ればと思っていたのですが、知識が乏しく
たどり着くことが出来ませんでした。
なので最新版でやろうと思ったのですが、ソースがあまりにも変わっていたので
ヘッダー用やフッター用と分けることがこちらも理解することが出来ず・・・といったところです。

これでご理解いただけますでしょうか。
何かありましたら引き続きよろしくお願いします。
添付: global_nav.txt
 

Re: オートナビから特定ページのみ除くについて

2014年6月23日 at 17:37
バージョン5.5の頃のオートナビのテンプレートから、exclude_navをexclude_globalnavに変えただけのもののようです。最新のオートナビのテンプレートに、exclude_globalnav属性が付いている際に非表示にするカスタマイズを加えて作り直した方が早いのではないかと思います。

if (!$ni->cObj->getATtribute('exclude_globalnav') {
// この中はexclude_globalnav属性が設定されている場合処理されない
}
 

Re: オートナビから特定ページのみ除くについて

2014年6月24日 at 19:53
hissyさんありがとうございます。

処理を囲むことで対応しましたが、「$ni->isLast」で呼び出すと
フルサイトマップで一番下にあるものが判定されてしまうので
フルサイトマップの一番下に移動させるという感じで対応してみました・・・
表示されるものの最後に付与する方法を引き続き模索してみます。
長くなりますが、カスタムテンプレートのソース張っておきます。

生意気ではございますがひとつ・・・ifの閉じ括弧がありませんでした。


<?php defined('C5_EXECUTE') or die("Access Denied.");
$navItems = $controller->getNavItems();
?>

<ul class="nav-header">

<?php foreach ($navItems as $ni) {
if (!$ni->cObj->getATtribute('exclude_globalnav')) {

$classes = array();

if ($ni->isCurrent) {
$classes[] = 'nav-selected';
}
if ($ni->inPath) {
$classes[] = 'nav-path-selected';
}
if ($ni->isFirst) {
$classes[] = 'first';
}
if ($ni->isLast) {
$classes[] = 'nav-last';
}

$classes = implode(" ", $classes);
?>

<li class="<?php echo $classes?>">
<a class="<?php echo $classes?>" href="<?php echo $ni->url?>" target="<?php echo $ni->target?>"><?php echo $ni->name?></a>
</li>
<?php
}
}
?>

</ul>

<div class="ccm-spacer"> </div>
 

Re: オートナビから特定ページのみ除くについて

2014年6月24日 at 20:24
isLastはサイトマップ順で並べた際の同階層の最後のページが該当すると思います。
階層関係なく、最後のliにclassをつけたい、ということでしょうか?
 

Re: Re: オートナビから特定ページのみ除くについて

2014年6月24日 at 20:41
返信ありがとうございます。

> 階層関係なく、最後のliにclassをつけたい、ということでしょうか?

単純に表示されているオートナビの最後のliに入れたいと思っています。

例えば、ヘッダーのナビでは
 ・Home
 ・会社概要
 ・サービス案内
 ・お問い合わせ
とあったとしたならばお問い合わせにclass="last"が付くように、
フッターナビでは
 ・Home
 ・会社概要
 ・サービス案内
 ・お問い合わせ
 ・プライバシーポリシー
 ・サイトマップ
としたならば、サイトマップにclass="last"が付くようにといった感じです。
 

Re: オートナビから特定ページのみ除くについて

2014年6月24日 at 21:49
基本的にそういう仕様なのですが、isLastはcontroller.phpの時点で判断されているので、view.phpで特定の属性の項目を除外したりしたせいでズレるのだと思います。従って、view.phpで何とかするしかないですね。例えば…

$count = 0;
foreach ($navItems as $ni) {
$count++;
if ($count == count($navItems)) {
$classes[] = 'last';
}
}
 

Re: オートナビから特定ページのみ除くについて

2014年6月24日 at 23:49
hissyさんのおかげで解決できました。
基本的には動いてくれるのですね。

ただ、count($navItems)にすると階層全部引っ張ってきてしまったので
先に違う変数を作ってカウントさせることで対応させました。
ありがとうございました。非常に助かりました。

以下、ソースです。


<?php defined('C5_EXECUTE') or die("Access Denied.");
$navItems = $controller->getNavItems();

$navattr = "exclude_globalnav"; // 属性

$excount =0;
foreach ($navItems as $ni) {
if (!$ni->cObj->getATtribute($navattr)) {
$excount++;
}
}
?>


<ul class="nav-header">

<?php

$count = 0;

foreach ($navItems as $ni) {
if (!$ni->cObj->getATtribute($navattr)) {

$classes = array();

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

$count++;
if ($count == $excount) {
$classes[] = 'nav-last';
}

$classes = implode(" ", $classes);
?>

<li class="<?php echo $classes?>">
<a class="<?php echo $classes?>" href="<?php echo $ni->url?>" target="<?php echo $ni->target?>"><?php echo $ni->name?></a>
</li>

<?php
} // END *** if (!$ni->cObj->getATtribute('exclude_globalnav'))
}
?>

</ul>

<div class="ccm-spacer"> </div>