ラック
Home > CMS > 記事 > 2015年1月 > カテゴリやタグの出力にaタグを付けたい

カテゴリやタグの出力にaタグを付けたい

カテゴリ: MODx

今更ですが、ブログの記事に出力されているカテゴリやタグの名前をクリックすると同じカテゴリやタグが付けられた記事の一覧が出るようにできると良いなぁ、と思い改造を試みるなど。

	
<?php
/* *********************************************
 カテゴリ一覧にaタグを付けて出力するスニペット
********************************************* */

//テンプレート変数を読み込む
$tvStrArr = $modx->getTemplateVarOutput('category'); //テンプレート変数名を入れること
$tvStrVar = $tvStrArr['category'];

//aタグを付ける処理
$aTagStart = "<a href=\"./category_list.html?c_ttc_landing_tags="; //URLは適宜変更
if(!empty($tvStrVar)) { //カテゴリ・タグ一覧の文字列が空(0やfalse、空文字列も条件に含む)でない場合
	$tvStrVar = htmlspecialchars($tvStrVar, ENT_QUOTES, 'UTF-8');
	if(strpos($tvStrVar, ",") != 0) { //「,」が含まれている場合(カテゴリやタグ一覧である文字列の先頭にデリミタの「,」があるのもおかしいので、弾くようにあえて!=0。普通の文字列比較なら!==falseという条件にすべき)
		$tvArray = explode(",", $tvStrVar);
		for($i = 0; $i < count($tvArray)-1; $i++) {
			$tvArray[$i] = str_replace("\r\n", '', $tvArray[$i]); //改行文字を削除。たぶんテンプレート変数の登録の仕方に依るもの
			$tvStrUrl[$i] = rawurlencode($tvArray[$i]);
			$arrLinkAddTV[$i] = $aTagStart . $tvStrUrl[$i] . "\">" . $tvArray[$i] . "</a>,"; //デミリタ付きで出力
			echo $arrLinkAddTV[$i];
		}
		$tvArray[$i] = str_replace("\r\n", '', $tvArray[$i]);
		$tvStrUrl[$i] = rawurlencode($tvArray[$i]);
		$arrLinkAddTV[$i] = $aTagStart . $tvStrUrl[$i] . "\">" . $tvArray[$i] . "</a>"; //最後だけデリミタなしで出力
		echo $arrLinkAddTV[$i];
	}
	else { //1個だけの場合(=デリミタ「,」がない)は単体出力
		$tvStrVar = str_replace("\r\n", '', $tvStrVar);
		$varLinkAddTV = $aTagStart . rawurlencode($tvStrVar) . "\">" . $tvStrVar . "</a>";
		echo $varLinkAddTV;
	}
}
?>
	

としたところ、各記事でスニペットを読み込んだ場合は意図した通りに動きました。
リソースが特定されている場合は、getTemplateVarOutputがちゃんとテンプレート変数を拾っている感じ(逆に記事一覧の中などだとこれでは動かない)。
…ということは、記事一覧のときにはリソースIDが特定できれば同じ手法が使えるということか…?
あとは既存のカテゴリ一覧を表示させるPHxスニペットと連携させて動作することを確認。URLエンコードしないと新しいタブで開いた時に文字化けして正しく動作しないのでURLエンコード処理を追加。

タグ: カテゴリ・タグ, テンプレート変数, スニペット, ブログ関係

 



関連する記事一覧