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>