PHPモジュール内でHTMLLabelを使用する

HTMLLabelというのは、cms:id="***"(標準設定ではsoy:id="***"になる)を作る為に設けられたクラスで、PHPモジュール内でも使用可能です。

https://github.com/inunosinsi/SOY2/blob/master/SOY2HTML/SOY2HTMLComponents/HTMLLabel.class.php


詳しい説明の前にPHPモジュールを自作する - SOY CMSを使ってみようで作成した<!-- cms:module="parts.test" -->を書き換えて、HTMLLabelを介して文字列を出力してみます。

上記URLで作成したモジュールのパスは

/ドキュメントルート/サイトID/.module/parts/test.php

になります。


早速、HTMLLabelを使って、soy:id="test"というタグを使用できるようにコードを作成します。

<?php
function soycms_test(string $html, HTMLPage $htmlObj){
	$obj = $htmlObj->create("soycms_test", "HTMLTemplatePage", array(
		"arguments" => array("soycms_test", $html)
	));

	// 下記のコードで soy:id="test"タグが使用できるようになる
	$obj->createAdd("test", "HTMLLabel", array(
		"text" => date("Y-m-d H:i:s")
	));

	// createAddを使う場合は最後に下記のコードを加えておく
	$obj->display();
}
?>

HTMLLabelを使用する為に、$page変数に格納されたオブジェクトのcreateメソッドで、HTMLTemplatePageクラスを呼び出します。

この時、createメソッドの最初のパラメータにモジュールで決めた関数名(今回はsoycms_test)を指定します。

https://github.com/inunosinsi/SOY2/blob/master/SOY2HTML/SOY2HTMLComponents/HTMLPage.class.php


$objにはHTMLTemplatePageが格納され、その親クラスであるHTMLPageの持つcreateAddメソッドでsoy:idタグを追加します。

createAddでは、一番目の値でsoy:id="***"の***の箇所を指定し、二番目にSOY2HTMLと呼ばれる仕組みの何のクラスを使用するのかを指定し、三番目の値で実際に出力する内容を指定します。


今回は三番目の値として指定した配列内で、array("text" => date("Y-m-d H:is"))と指定していますが、これはページに出力する際にhtmlspecialcharsの処理を介した後の値を出力します。

※文字列出力の際にHTMLタグの使用を禁止する事で、XSS攻撃の危険を回避します。

PHP: htmlspecialchars - Manual

クロスサイトスクリプティング - Wikipedia




作成したモジュールを公開側のページで使用してみます。

今回のモジュールを作成したいページのテンプレートに下記のコードを挿入します。

<!-- cms:module="parts.test" -->
<!-- soy:id="test" -->ここにHTMLLabelで指定した内容を出力する<!-- /soy:id="test" -->
<!-- /cms:module="parts.test" -->

公開側ページを開き、


soycms_php_module_first_step


記述した内容が出力されることを確認しましょう。




HTMLLabelでsoy:id以外のタグを生成したい。

例えば、cms:id="test"


<?php
function soycms_test(string $html, HTMLPage $htmlObj){
	$obj = $htmlObj->create("soycms_test", "HTMLTemplatePage", array(
		"arguments" => array("soycms_test", $html)
	));

	$obj->createAdd("test", "HTMLLabel", array(
		"soy2prefix" => "cms",
		"text" => date("Y-m-d H:i:s")
	));

	$obj->display();
}
?>

createAddの三番目の配列内で、"soy2prefix" => "cms"にすると、cms:id="test"が使用できるようになります。




HTMLLabelで生成したsoy:idタグでHTMLタグを出力できるようにしたい。


<?php
function soycms_test(string $html, HTMLPage $htmlObj){
	$obj = $htmlObj->create("soycms_test", "HTMLTemplatePage", array(
		"arguments" => array("soycms_test", $html)
	));

	$obj->createAdd("test", "HTMLLabel", array(
		"html" => "<strong>".date("Y-m-d H:i:s")."</strong>"
	));

	$obj->display();
}
?>

createAddの三番目の配列内で、「"text" => 文字列」の箇所を「"html" => 文字列」に変更すると、HTMLタグの使用が許可されます。


HTMLLabelに関する詳しい記述はSOY2HTMLのHTMLLabelを詳しく見るにあります。

同じカテゴリーの記事