NP_Related|snippet内のタグを除去

NP_Related|snippet内のタグを除去

Author : pushman|Nucleus|2005-10-01 Sat 22:55

先日導入した猛烈便利なプラグイン「NP_Related」ですが、よくわからない「snippet」という機能がありました。わからないものは無視してしまえという姿勢を貫いていたのですが、先程気付きました。リンクの「title」属性に、該当する記事の要約を挿入してくれます。こりゃ便利! と思ったのですが、あるアイテム表示で大きくレイアウトが壊れてしまいました。その時のHTMLソースを見ると「title」属性の中にHTMLタグが挿入されてしまい、大混乱に陥っていたようです。というわけでNP_Relatedのソースをカスタマイズしてみました。

設置直後に表示形式を変更したりしたのですが、このプラグインは相当でかいです。素人ではきつーい、と思ったのですが…成せば成りますね。519行目あたり、といっても僕は相当いじくったので、元の行番号は不明です。あくまで「付近」ということで。で、そこらあたりに

if ($showsnippet) {

で始まるif文があるはずです。ここはローカル検索時にいろいろ処理しているところの一部だと思います。で「if ($showsnippet)」なので、snippetを表示するときの処理がつらーっと書いています。NP_Relatedのオプション設定で「Show timestamp for local items」を「はい」にしていると、本文にsnippetを表示するのでタグが出力されても問題ありません。ので、次の「else」以下が修正点となります。と、if文が入れ子になっているのでややこしい…以下を参照してください。

if ($showsnippet) {
	if ($this->flg_timelocal == 'yes') {
		echo '<a href="'. $itemurl .'">'. $str_title .' '. $str_itime .'</a>';
	}
	else {
		echo '<a href="'. $itemurl .'" title="'. $str_itime .'">'. $str_title .'</a>';
	}
	echo '<br /> <span class="iteminfo" style="font-size:smaller">'. $str_snippet .'</span>';
	}
	else {// ←ここです
	if ($this->flg_timelocal == 'yes') {
		$str_snippet = htmlentities($str_snippet,ENT_QUOTES,"UTF-8");
		echo '<a href="'. $itemurl .'" title="'. $str_snippet .'">'
		. $str_title .' '. $str_itime .'</a>';
	}
	else {
		$str_snippet = htmlentities($str_snippet,ENT_QUOTES,"UTF-8");
		echo '<a href="' . $itemurl .'" title="'. $str_snippet.$str_itime .'">'
	. $str_title . '</a>';
	}
}

わかりますでしょうか? 下線を引いている個所です。って、これすでに修正済みのコードですね。今度は僕が追加したところに下線を引きます。

if ($showsnippet) {
	if ($this->flg_timelocal == 'yes') {
		echo '<a href="'. $itemurl .'">'. $str_title .' '. $str_itime .'</a>';
	}
	else {
		echo '<a href="'. $itemurl .'" title="'. $str_itime .'">'. $str_title .'</a>';
	}
	echo '<br /> <span class="iteminfo" style="font-size:smaller">'. $str_snippet .'</span>';
	}
	else {//
	if ($this->flg_timelocal == 'yes') {
		$str_snippet = htmlentities($str_snippet,ENT_QUOTES,"UTF-8");
		echo '<a href="'. $itemurl .'" title="'. $str_snippet .'">'
		. $str_title .' '. $str_itime .'</a>';
	}
	else {
		$str_snippet = htmlentities($str_snippet,ENT_QUOTES,"UTF-8");
		echo '<a href="' . $itemurl .'" title="'. $str_snippet.$str_itime .'">'
	. $str_title . '</a>';
	}
}

処理内容は単純で、表示する直前に「htmlentities」を使って、タグを実体参照に変換しています。3つ目のパラメーターはご使用の文字コードに置き換えてください。

最初は、初めのif文の直後にやっちゃったのですが、それだと本文に直接表示する場合も変換してしまうので、ここに指定する必要がある、と考えました。

そうそう、Amazon検索の時にも本のタイトル部分に上記処理をしていたほうがよさそうです。本のタイトルに「&」が使われていると、XHTMLでInvalidとなってしまいますから。

たったこれだけでございますが、PHPのマニュアルページを見ながら、1時間ほど格闘しておりました。2つ目のパラメータの使い方がわからなくて…慌てず落ち着いて読まなきゃいけませんね。

ふと気付いたのですが、Amazon検索って「本」からのみなんですね。勉強がてら、全てのジャンル「Blended」から検索できないか調べてます。

Tag(s): NP_Related

Comments

Posted by yu2005-10-05 Wed 22:11

なるほど確かに!トラバありがとうございます。
サイトのデザイン最近変えたんでしょうか?かっこいいっす。

Amazonの件、「全てのジャンル」って負荷が高くて今は使えなくなったとかどこかで見たような気もします(でもうろおぼえなので違うかも・・)

Posted by pushman|2005-10-06 Thu 03:46

yu さん
お褒めいただき光栄です。ありがとうございます。実は半年ほど前にデータベースが壊れてしまい、休止しておりましたが、ふと思い立ってサブドメインで再スタートしてます。今後はこちらをメインとしますので、よろしくお願いします。

「全てのジャンル」って負荷が高くて今は使えなくなったとかどこかで見たような気もします

そうなんですか…って、素人がぱっと調べただけではなんともならないので、お手上げでした。あきらめついてよかったです。

しかしとても便利なプラグイン、本当にありがとうございます。
これからもよろしくお願いします。

Comment Form (policy)

(メールアドレスは非公開です)

Others
Newest 5 Items

NP_GoogleMapsにオリジナルマーカーを表示

BLOG.phpのPHP Warning

CPIでNucleus(UTF-8)

NP_znItemFieldEX|「本日」の条件判断を修正

NP_OnlyImg|高さを有効に

Nucleus CMS: Pure Publishing