ラック
Home > CMS > 記事 > 2016年1月 > Dittoのsummaryからaタグを除去

Dittoのsummaryからaタグを除去

カテゴリ: MODx

最近よく見る、新着記事をタイル状に並べる形のレイアウト。

ブログならタイトル、投稿日時、カテゴリ、タグ、そして本文の要約あるいは抜粋がタイルの中に書かれることになると思います。

MODxなら、Dittoでsummaryですかね。

そうすると、その中にaタグが挟まっていると記事へのリンクのaタグの中に入れ子になってしまい、その部分だけ別のページ・サイトのリンクになってしまいます。

<a href="#">
	<div class="articleTile">
		<h2>記事タイトル</h2>
		<p>本文の抜粋です。<a href="#">本文</a>の抜粋です。本文の抜粋です。</p><!-- ここでaタグが入れ子になる -->
		<!-- 上のa閉じタグで全体を覆うaタグも終わりとみなされ、この辺りは記事へのリンクがない状態になる -->
		<span class="category">カテゴリ:カテゴリ1</span>
		<span class="tag">タグ:タグ1、タグ2、タグ3</span>
	</div>
</a>

例えばこんな感じ。

しかもそこでaタグが閉じられると以降の文章はaタグの範囲外になり、クリックしても記事に飛ばなくなります。

htmlの構造的にもaタグの入れ子は宜しくありません。

ということで、Dittoのsummary内からaタグを除去するフィルタを作りましょう。

スニペット

名前:phx:anchor-remover

$varSummary = $value; //Dittoで取得したsummaryを$varSummaryに代入

if(!empty($varSummary)) { //エイリアス一覧の文字列が空(0やfalse、空文字列も条件に含む)でない場合
	$result = "";
	$result = preg_replace('/<a href=([!-;=?-~]+)>?|<\/a>/','',$varSummary); //正規表現:ざっくりhrefの中にアルファベットや記号がある場合
	echo $result; //出力
}

こんなスニペットを作成し、これをDittoの中でsumarryにフィルタリングすれば良い、と。

[+summary:anchor-remover+]

これでaタグの入れ子を防ぐことができるようになりました。summary以外でも使えますが、目下summary用ですね…。

 

正規表現とか参考サイトはこちら。

 

今回は使いませんでしたが、タグ全消去ならばこれが使えそうですね。

タグ: スニペット, ブログ関係

 



関連する記事一覧