2007-10-28 Sun

NP_znItemFieldEX|URLエンコードを追加

NP_znItemFieldEXは標準で「タイトル」「本文」「続き」しかないNucleusのアイテム項目に、任意の項目を拡張してくれます。この機能のおかげでNucleusの使い方が猛烈自由になります。個人的にいちばんお世話になっているプラグインですね。

某サイトでこのNP_znItemFieldEXで追加した「Text」タイプの値を表示して、その値の検索結果のページへリンクをさせたかったのですが、WindowsのIEだけ、IEだけが、見事に文字化けしてしまいました。いろいろ調べたのですが、URLエンコードさせないと回避できそうになかったので、オプション項目を追加して対応してみました。

NP_znItemFieldEXの「Textarea」タイプには「removeBreaks」「htmlspecialchars」「removeBreaks_htmlspecialchars」と指定することで、改行処理をいろいろ変更してくれます。この処理を参考に「Text」タイプにもオプション項目「urlencode」を追加しました。

「DispEachType」関数内の1008行目あたりからはじまるswitch文でフィールドタイプの判別を行っているようです。いずれのタイプでも「$rdata」という変数にフィールドの値を渡して表示させている気がします。そこで、その直前に「urlencode」の処理を追加し、「Text」タイプの処理を以下のように修正しました。

case "Text":
	if ($rdata == '') return;
	//$query$expression
	// 追加開始
	switch ($format)
	{
		case 'urlencode':
			$rdata = urlencode($rdata);
			break;
	}
	// 追加終り
	$rdata = (!$itemid and $query) ? highlight($rdata, $expression, $this->highlight) : $rdata;
	$putData = array('fieldex' => $rdata);
	break;

あとはテンプレートに、

<%znItemFieldEX(fieldName,urlencode)%>

記述すれば、めでたくURLエンコードされた日本語が表示されます。実際にはこんな感じで使ってます。

<a href="サイトのURL?amount=0&amp;blogid=ブログID&amp;query=<%znItemFieldEX(fieldName,urlencode)%>"><%znItemFieldEX(fieldName)%></a>

2007-10-28 Sun / Category - Nucleus

このページの先頭に戻る

Copyright 2007 - Heartfield