concrete5 の超便利でシンプルなアドオン「Manual Nav」が、concrete5 のフルサイトマップなどから追加できる外部リンクの「新しいウインドウ」で開く設定や、隠れページ属性「nav_target」に対応させるためのカスタムテンプレートを作成しました。
微妙に便利になると思います。
Manual Nav とは
2015年時点での concrete5-japan.org サイトでもグローバルナビで使っているのが、このManual Nav です。concrete5 でデフォルトに実装されているオートナビは concrete5 のサイトマップから自動的にナビゲーションを作りますが、このアドオンは文字通り、自分の好きな順番で好きなページをピックアップして、<ul> <li> 表示するシンプルな無料パッケージです。
HTML+CSS とカスタムテンプレートの仕組みを分かっている concrete5 使いなら、必須なアドオンの1つとなっています。
ちなみに、作者は、超有名なアドオン Designer Content などを作っている Jordan さん。
nav_target とは
concrete5 のデフォルトの属性ではインストールされていませんが、nav_target というハンドルで、テキストフィールドのページ属性を作成すると、オートナビブロックでは、自動的にそこのテキスト情報を <a target=””> の中に入れてくれるようになっています。テキストフィールドではなく、選択フィールドにして、_self、_blank、_top などの属性を選択できるようにしてもいいです。
使い方と実際のコード
実際のコードです。
- Manual Nav を concrete5 にインストール
[concrete5]/blocks/
フォルダに 「manual_nav
」という階層でフォルダを作成- 下記のファイルを
view.php
として、そのフォルダに保存 - カスタムテンプレートとして使う場合は
[concrete5]/blocks/manual_nav/templates/○○○[カスタムテンプレート名].php
と保存してください。
<?php defined('C5_EXECUTE') or die(_("Access Denied.")); /** * concrete5.6.x Package 'Manual Nav' Custom Template * @package Manual Nav * @author Jordan Lev * @author Katz Ueno * @copyright Copyright (c) 2015 Katz Ueno. (http://katzueno.com) * @license http://www.concrete5.org/license/ MIT License * to support External Link's tareget="_blank" * and page attribute 'nav_target' * * I know I should be doing this in controller.php * * concrete5.6.x パッケージ 「Manual Nav」 * 外部リンクの「新しいウインドウ」 * ページ属性の「nav_target」に対応するためのカスタムテンプレート * 本来なら controller.php でやるべきなのも分かるんですが、面倒臭かったので・・・ */ ?> <ul> <?php foreach ($links as $link): $page = $link->cObj; $target = ''; if ($page->cPointerExternalLink != '') { if ($page->cPointerExternalLinkNewWindow) { $target ='_blank'; } } else { if ($page->getAttribute('nav_target')) { $target = $page->getAttribute('nav_target'); } } ?> <li> <a href="<?php echo $link->url; if ($target) echo '" target="' . $target ?>"> <?php echo htmlentities($link->text, ENT_QUOTES, APP_CHARSET); ?> </a> </li> <?php endforeach; ?> </ul>
コピペしやすいよう、Gist にも UP しています。
本来なら、MVC な concrete5 のお作法に則って、 controller.php に修正を加えるべきなんですけれど、簡単に1ファイルだけで修正できるようにしました。
作者にも、この修正を教えているので、もしかしたら、パッケージにも修正を入れてもらえるかもしれません。
それでは。
以上