特定のページだけを階層を含めたメニュー表示にする

2016年7月5日 at 11:58

5.7ユーザーです
過去に同様の件名のトピックスがあったので
参考にしてオートナビのテンプレートを加工しようとしています

親ページ
 ー子どもA
 ー子どもB
 ー子どもC

を特定のページ(親ページ)だけでナビを作る場合

 ー子どもA
 ー子どもB
 ー子どもC

となってしまうので
親ページも含めてナビに表示させるには
どのようにすれば良いのでしょうか?

phpはほとんど素人です

タグ:

Re: 特定のページだけを階層を含めたメニュー表示にする

2016年7月6日 at 5:30
便乗します

多言語化の auto_nav メニューで悩んでいます。

旧来は

ホーム--+
   |
  +-子供A
   |
  +-子供B
   |
  +-子供C

であったため
displayPages = 'top'
orderBy = 'display_asc'
displaySubPages = 'all'
displaySubPagesLevels = 'all'
の指定で
「ホーム」「子供A」「子供B」「子供C」
と並んでくれていましたが ustream の多言語化にならい

ホーム--+
   |
  +-ホーム(jp)--+
   |    |
   |    +-子供A
   |    |
   |   +-子供B
   |    |
  |    +-子供C
   |
   +-ホーム(us)--+
(以下略)

とした場合に「ホーム(jp)」をメニュー表示させることで悩んでます。

displayPages = 'second_level' からスタートしたときには「ホーム(jp)」が表示されずに
「子供A」「子供B」「子供C」だけになってしまいます。

displaySubPages/displaySubPagesLevels/displayPagesCID もいろいろと弄ってはみたのですが
なかなか思ったように表示されず手強くて困っています。
どう指定すると「ホーム(jp)」「子供A」「子供B」「子供C」と並んでくれるのでしょうか?
 

Re: 特定のページだけを階層を含めたメニュー表示にする

2016年7月8日 at 11:05
zapsgate さま

添付画像のように『外部リンク』としてサイトマップに追加してください。

ただし、パンくず表示のときに『ホーム / ホーム(jp) / 子供A』というように表示されますので、スタイルシート等で適宜対応してください。

よろしくお願いします。
 

Re: 特定のページだけを階層を含めたメニュー表示にする

2016年7月8日 at 14:32
返信ありがとうございます。
階層内にもう一つのページを外部リンクで作る、っていうのは発想がありませんでした。
 

Re: 特定のページだけを階層を含めたメニュー表示にする

2016年7月7日 at 14:29
せいけんさま

> phpはほとんど素人です

カスタムテンプレートで対応は可能ですが、PHP での記述が必要になります。
また、カスタムテンプレートの作成方法はご存知でしょうか?
 

Re: 特定のページだけを階層を含めたメニュー表示にする

2016年7月7日 at 14:48
>カスタムテンプレートで対応は可能ですが、PHP での記述が必要になります。
>また、カスタムテンプレートの作成方法はご存知でしょうか?

お返事ありがとうございます
ブロックのカスタムテンプレートは他で作成しています

autonavのview.phpを加工すればよいかとおもっていたのですが
どこを修正すれば良いかわかりませんでした
 

Re: Re: 特定のページだけを階層を含めたメニュー表示にする

2016年7月7日 at 15:04
せいけんさま

> autonavのview.phpを加工すればよいかとおもっていたのですが

カスタムテンプレートを制作されたことがあるということですので、以下の記述を autonav のview.php をもとにカスタマイズしてください。

//*** Step 2 of 2: Output menu HTML ***/

$th = Loader::helper('text');
$nh = Loader::helper('navigation');

$parent = Page::getByID($c->getCollectionParentID());
$parentLink = $nh->getCollectionURL($parent);
$parentName = $th->entities($parent->getCollectionName());

if (count($navItems) > 0) {
echo '<h3><a href="' .$parentLink. '">' .$parentName. '</a></h3>';
echo '<ul class="nav">'; //opens the top-level menu


現在のページの親ページのリンクとタイトルを取得して表示しています。
あとは適宜修正してください。

よろしくお願いします。
 

Re: 特定のページだけを階層を含めたメニュー表示にする

2016年7月7日 at 15:23
すいません、勝手にローカルメニューを想定いたので、実現したいこととは違うかもしれません。
 

Re: 特定のページだけを階層を含めたメニュー表示にする

2016年7月7日 at 17:01
nipper様
教えていただいたカスタマイズを試してみました
ありがとうございます

ただサイトのトップが表示されてしまいました

この方法でparentではなく
サブ階層の親を指定する方法があると良いのですが・
 

Re: 特定のページだけを階層を含めたメニュー表示にする

2016年7月7日 at 17:40
だぶん、下記で可能と思います。テストしてないのでたぶんですが。。。

$parent = Page::getByID($c->getCollectionParentID());

                    ↓
$parent = Page::getByID($navItems[0]->cObj->getCollectionParentID());


ただ、これは表示できるデータが0件の時にはエラーになりますので、nipperさんが書かれたソースをすべて、
if (count($navItems) > 0) {


以下に入れたほうが無難です。
 

Re: 特定のページだけを階層を含めたメニュー表示にする

2016年7月8日 at 10:05
nipperさま aclissさま
ありがとうございました
表示ができるようになりました
そもそも
ディレクトリ/index.html
の感覚があるので戸惑ってしまいます

下記のようなソースにしています
これで見た目はOKでした。欲を言えばリストの中にparentを入れたいので勉強してみます


//*** Step 2 of 2: Output menu HTML ***/


if (count($navItems) > 0) {
$th = Loader::helper('text');
$nh = Loader::helper('navigation');

$parent = Page::getByID($navItems[0]->cObj->getCollectionParentID());
$parentLink = $nh->getCollectionURL($parent);
$parentName = $th->entities($parent->getCollectionName());

echo '<p><a href="' .$parentLink. '">' .$parentName. '</a></p>';
echo '<ul class="fh5co-links">'; //opens the top-level menu

foreach ($navItems as $ni) {

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

if ($ni->hasSubmenu) {
echo '<ul>'; //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
} else if (is_object($c) && $c->isEditMode()) { ?>
<div class="ccm-edit-mode-disabled-item"><?php echo t('Empty Auto-Nav Block.')?></div>
<?php }