concrete5 便利アドオン「Manual Nav」の外部リンクの「新しいウインドウ」と「nav_target」に対応させるカスタムテンプレート

concrete5 トリック集

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 などの属性を選択できるようにしてもいいです。

 

使い方と実際のコード

実際のコードです。

  1. Manual Nav を concrete5 にインストール
  2. [concrete5]/blocks/ フォルダに 「manual_nav」という階層でフォルダを作成
  3. 下記のファイルを view.php として、そのフォルダに保存
  4. カスタムテンプレートとして使う場合は [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ファイルだけで修正できるようにしました。

作者にも、この修正を教えているので、もしかしたら、パッケージにも修正を入れてもらえるかもしれません。

それでは。

 

以上