ざ・わーるど@はてな

気が向いた時に更新する雑記です

smarty_function_selectでプルダウンを作る

最新バージョンで簡単に作れるようになったので検索してきた方はこちらを見ましょう。


↓以下は古いネタなのでもはやどうでもいい話です。



なんかハマったので、Ethnaに入っているSmarty Pluginでプルダウンを作る方法のメモ。

公式サイトのサンプルでは、{form_input}でプルダウンが作れるんだけどソースを参考にしながら作ってみたけどうまくいかなかった。
http://ethna.jp/ethna-document-demo-ittsample.html


ソースを読んでいったら{form_input}ではプルダウンは作れないみたいで、独自にSmarty Pluginを追加しないといけないっぽい(サンプルは独自のを追加してた)。
Ethna標準で『smarty_function_select』というのがあって、これでプルダウンが作れるみたい。
http://ethna.jp/doc/Ethna/_class_Ethna_SmartyPlugin_php.html#functionsmarty_modifier_select


これで実験してみることに。実際のファイル名とかパスは適当。書き方が正しいのかとかは自信ありませんぼく。

/home/theworld/world/app/action/Jojo.php

class World_Action_Jojo extends Ethna_ActionClass
{
	function World_Action_Jojo(&$ctl)
	{
		parent::Ethna_ActionClass(&$ctl);
		
		$voiceList = array(
			"ora" => array("name" => "オラオラオラオラ!"),
			"muda" => array("name" => "無駄無駄無駄無駄!"),
			"hin" => array("name" => "貧弱!貧弱ゥ!"),
			"ury" => array("name" => "URYYYYYYYYYYY!"),
		);
		
		$this->af->setApp("voiceList", $voiceList);
	}
	
	function prepare()
	{
		return null;
	}

	function perform()
	{
		return 'jojo';
	}
}

「name」と指定しないとダメだった。

/home/theworld/world/template/ja/jojo.tpl

テンプレートはこんなかんじ。

<dl>
	<dt>選択してください。</dt>
	<dd>{select list=$app.voiceList name="voice" value=$form.vice}</dd>
</dl>

emptyを追加すると、プルダウンの一番最初に指定したものが出るようになる。

{select list=$app.voiceList name="voice" value=$form.vice empty="-- 選択 --"}

これでページを表示させるとプルダウン完成。

<dl>
	<dt>選択してください。</dt>
	<dd><select name="voice">
	<option value="">-- 選択 --</option>
	<option value="ora">オラオラオラオラ!</option>
	<option value="muda">無駄無駄無駄無駄!</option>
	<option value="hin">貧弱!貧弱ゥ!</option>
	<option value="ury">URYYYYYYYYYYY!</option>
	</select>
	</dd>
</dl>


とりあえず動いたのでアイス買ってこよう。