SOY2HTMLでテキストフォームを設置する - HTMLInput編でプラグインの設定用の入力(テキスト)フォームの設置を見ました。

今回は更にテキストエリアを追加してみます。




テキストエリアを設置します。

構築は前の記事のダミープラグインのコードに加えていきます。


テキストエリアの設置はHTMLTextAreaクラスを利用して、

前回追加した入力フォームの下に下記のコードを追加します。

$this->createAdd("content", "HTMLTextArea", array(
	"name" => "Config[content]",
	"value" => "huga"
));

いつも通り、短縮形を見ておくと、

$this->addTextArea("content", array(
	"name" => "Config[content]",
	"value" => "huga"
));

これまた今回も前回同様、ダミープラグインには短縮形の方で記述します。


DummyPluginConfigPage.class.php

<?php

class DummyPluginConfigPage extends WebPage {

	private $configObj;

	function __construct(){}

	function doPost(){
		if(soy2_check_token()){
			//入力内容の保存
			SOYShop_DataSets::put("dummy_plugin.config", $_POST["Config"]);
			$this->configObj->redirect("updated");
		}
		$this->configObj->redirect("failed");
	}

	function execute(){
		parent::__construct();

		$this->addForm("form", array(
			"method" => "POST"
		));

		$this->addInput("title", array(
			"name" => "Config[title]",
			"value" => "hoge"
		));

		$this->addTextArea("content", array(
			"name" => "Config[content]",
			"value" => "huga"
		));
	}

	function setConfigObj($configObj){
		$this->configObj = $configObj;
	}
}

続いて、対になるHTMLファイルの方に新たに作成したsoy:id付きテキストフォームを設置します。


DummyPluginConfigPage.html

<form soy:id="form">
	<dl>
		<dt>タイトル</dt>
		<dd>
			<input type="text" soy:id="title">
		</dd>
		<dt>本文</dt>
		<dd>
			<textarea soy:id="content"></textarea>
		</dd>
	</dl>
	<input type="submit" value="押す">
</form>

テキストフォームのタグを追加できたら、実際に画面を確認してみて、



テキストエリアが追加された事を確認します。




該当箇所のソースコードを確認してみると、

<textarea name="Config[content]">huga</textarea>

このようにnameと(JavaScriptでいうところの)innerTextの箇所に値が追加されていました。

この値は


$this->addTextArea("content", array(
	"name" => "Config[content]",
	"value" => "huga"
));

addTextAreaの第二引数の配列内で指定した値が反映されています。

textareaタグにはvalue属性がないが、前回のaddInputの際のinputタグのvalue属性のような振る舞いをします。


今回も以前同様、HTMLTextAreaの実際のコードを見ておきます。

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


/**
 * @package SOY2.SOY2HTML
 */
class HTMLTextArea extends HTMLFormElement{
	var $tag = "textarea";
	const SOY_TYPE = SOY2HTML::HTML_BODY;
	var $text;
	function setText($value){
		$this->text = $value;
	}
	function setValue($value){
		$this->text = $value;
	}
	function getText(){
		return (string) $this->text;
	}
	function getObject(){
		return "\n".htmlspecialchars($this->getText(),ENT_QUOTES,SOY2HTML::ENCODING);
	}
}