例えば、ブログ記事で追記が無かった場合に続きを読むのリンクの出し分けを行いたい時がある。

この出し分けの際、リンクの出力の有無だけであればHTMLLinkだけで制御できるけれども、

SOY2HTMLでリンクを出力する - HTMLLink編


<p class="more_link">
	<a cms:id="more_link">続きを読む</a>
</p>

該当する個所が上記のようなコードであった場合、

アンカータグを囲っている親のタグ(p)もまとめて出力制御の対象にしたい

という時が頻繁にある。


ここで便利なのがHTMLModelクラスで、

$this->createAdd("has_more", "HTMLModel", array(
	"visible"=> strlen(trim($more)),
	"soy2prefix"=>"cms",
));

このようにvisibleの値にどのような条件であれば、囲った個所を出力するか?といった制御が可能になる。

※soy2prefixについては下記の記事をご覧ください。

SOY2HTMLでsoy:idを作る - HTMLLabel編


これで、


<!-- cms:id="has_more" -->
<p class="more_link">
	<a cms:id="more_link">続きを読む</a>
</p>
<!-- /cms:id="has_more" -->

条件を満たした場合に出力されるエリアを制御することが可能となる。


いつものように短縮形を書いておくと、

$this->addModel("has_more", array(
	"visible"=> strlen(trim($more)),
	"soy2prefix"=>"cms",
));

このようになる。


HTMLModelは条件によって出力の有無を決める以外にも、

<link rel="stylesheet" href="*******">といった外部CSSのパスを指定する個所をPHPで制御したりといった今まで紹介したSOY2HTMLでは出来ないことのすべてをフォローするけれども、

使い方が複雑なので、必要になった時にでも紹介します。




最後に

/common/lib/soy2_build.phpを開きclass HTMLModelでテキスト検索して

該当するクラスを読んでみる。


/**
 * @package SOY2.SOY2HTML
 * 何もしないコンポーネント
 */
class HTMLModel extends SOY2HTML{
	const SOY_TYPE = SOY2HTML::HTML_BODY;
	function execute(){}
	function getObject(){
		return "";
	}
}

見ての通り、何もしない。

HTMLModelを理解する為には継承しているSOY2HTMLの方の挙動を把握する必要がある。