Source for file Ethna_ViewClass.php
Documentation is available at Ethna_ViewClass.php
// vim: foldmethod=marker
* @author Masaki Fujimoto <fujimoto@php.net>
* @license http://www.opensource.org/licenses/bsd-license.php The BSD License
* @author Masaki Fujimoto <fujimoto@php.net>
/** @var object Ethna_Controller Controllerオブジェクト */
/** @var object Ethna_Backend backendオブジェクト */
/** @var object Ethna_Config 設定オブジェクト */
/** @var object Ethna_I18N i18nオブジェクト */
/** @var object Ethna_Logger ログオブジェクト */
/** @var object Ethna_Plugin プラグインオブジェクト */
/** @var object Ethna_ActionError アクションエラーオブジェクト */
/** @var object Ethna_ActionError アクションエラーオブジェクト(省略形) */
/** @var object Ethna_ActionForm アクションフォームオブジェクト */
/** @var object Ethna_ActionForm アクションフォームオブジェクト(省略形) */
/** @var array アクションフォームオブジェクト(helper) */
var $helper_action_form =
array();
/** @var array helperでhtmlのattributeにはしないパラメータの一覧 */
var $helper_parameter_keys =
array('default', 'option', 'separator');
/** @var object Ethna_Session セッションオブジェクト */
/** @var string 遷移先テンプレートファイル名 */
/** @var boolean 配列フォームを呼んだカウンタをリセットするか否か */
var $reset_counter =
false;
* Ethna_ViewClassのコンストラクタ
* @param object Ethna_Backend $backend backendオブジェクト
* @param string $forward_name ビューに関連付けられている遷移名
* @param string $forward_path ビューに関連付けられているテンプレートファイル名
$c =
& $backend->getController();
$this->backend =
& $backend;
$this->config =
& $this->backend->getConfig();
$this->i18n =
& $this->backend->getI18N();
$this->logger =
& $this->backend->getLogger();
$this->plugin =
& $this->backend->getPlugin();
$this->ae =
& $this->action_error;
$this->af =
& $this->action_form;
$this->forward_name =
$forward_name;
$this->forward_path =
$forward_path;
foreach (array_keys($this->helper_action_form) as $action) {
* テンプレートに設定する値でコンテキストに依存しないものは
* 特殊な画面を表示する場合を除いて特にオーバーライドする必要は無い
* (preforward()のみオーバーライドすれば良い)
$renderer->perform($this->forward_path);
// {{{ addActionFormHelper
* helperアクションフォームオブジェクトを設定する
* @param string $action アクション名
* @param boolean $dynamic_helper 動的フォームヘルパを呼ぶか否か
if (isset
($this->helper_action_form[$action])
&&
is_object($this->helper_action_form[$action])) {
if ($action ===
$ctl->getCurrentActionName()) {
$this->helper_action_form[$action] =
& $this->af;
$form_name =
$ctl->getActionFormName($action);
if ($form_name ===
null) {
$this->logger->log(LOG_WARNING,
'action form for the action [%s] not found.', $action);
$this->helper_action_form[$action] =
& new $form_name($ctl);
// 動的フォームを設定するためのヘルパメソッドを呼ぶ
$af =
& $this->helper_action_form[$action];
$af->setFormDef_ViewHelper();
// {{{ clearActionFormHelper
* helperアクションフォームオブジェクトを削除する
unset
($this->helper_action_form[$action]);
// {{{ _getHelperActionForm
* アクションフォームオブジェクト(helper)を取得する
* $action === null で $name が指定されているときは、$nameの定義を
* @param string action 取得するアクション名
* @param string name 定義されていることを期待するフォーム名
* @return object Ethna_ActionFormまたは継承オブジェクト
if (isset
($this->helper_action_form[$action])
&&
is_object($this->helper_action_form[$action])) {
return $this->helper_action_form[$action];
$this->logger->log(LOG_WARNING,
'helper action form for action [%s] not found',
$def =
$this->af->getDef($name);
// $this->helper_action_form を順に調べる
foreach (array_keys($this->helper_action_form) as $action) {
if (is_object($this->helper_action_form[$action]) ===
false) {
$af =
& $this->helper_action_form[$action];
$def =
$af->getDef($name);
$this->logger->log(LOG_WARNING,
'action form defining form [%s] not found', $name);
* フォームヘルパ用、内部フォームカウンタをリセットする
$this->reset_counter =
true;
* 指定されたフォーム項目に対応するフォーム名(w/ レンダリング)を取得する
$def =
$af->getDef($name);
if ($def ===
null || isset
($def['name']) ===
false) {
* submitボタンを取得する(送信先アクションで受け取るよう
* 定義されていないときに、たんにsubmitボタンを作るのに使う)
if (isset
($params['type']) ===
false) {
$params['type'] =
'submit';
* 指定されたフォーム項目に対応するフォームタグを取得する
$def =
$af->getDef($name);
if (isset
($def['form_type']) ===
false) {
// 配列フォームが何回呼ばれたかを保存するカウンタ
if (isset
($def['type']) &&
is_array($def['type'])) {
static $form_counter =
array();
if ($this->reset_counter) {
$this->reset_counter =
false;
if (isset
($form_counter[$action]) ===
false) {
$form_counter[$action] =
array();
if (isset
($form_counter[$action][$name]) ===
false) {
$form_counter[$action][$name] =
0;
$def['_form_counter'] =
$form_counter[$action][$name]++
;
switch ($def['form_type']) {
$input =
$this->_getFormInput_Button($name, $def, $params);
* フォームタグを取得する(type="form")
if (isset
($params['method']) ===
false) {
$params['method'] =
'post';
// {{{ _getSelectorOptions
* select, radio, checkbox の選択肢を取得する
if (isset
($params['option'])) {
$source =
$params['option'];
} else if (isset
($def['option'])) {
$source =
$def['option'];
if (count($split) ===
1) {
$method_or_property =
$split[0];
$options =
$af->$method_or_property();
$options =
$af->$method_or_property;
$attr_list =
$mgr->getAttrList($split[1]);
foreach ($attr_list as $key =>
$val) {
$options[$key] =
$val['name'];
$this->logger->log(LOG_WARNING,
'selector option is not valid. [actionform=%s, option=%s]',
// {{{ _getFormInput_Button
* フォームタグを取得する(type="button")
$params['type'] =
'button';
if (isset
($def['type'])) {
$params['name'] =
is_array($def['type']) ?
$name .
'[]' :
$name;
if (isset
($params['value']) ===
false) {
if (isset
($def['name'])) {
$params['value'] =
$def['name'];
if (isset
($params['value']) &&
is_array($params['value'])) {
$params['value'] =
$params['value'][0];
// {{{ _getFormInput_Checkbox
* チェックボックスタグを取得する(type="check")
$params['type'] =
'checkbox';
if (isset
($def['type'])) {
$params['name'] =
is_array($def['type']) ?
$name .
'[]' :
$name;
if (isset
($def['option']) &&
is_array($def['option'])) {
$options =
$def['option'];
if (isset
($params['default'])) {
$current_value =
$params['default'];
} else if (isset
($def['default'])) {
$current_value =
$def['default'];
$current_value =
array();
if (isset
($params['separator'])) {
$separator =
$params['separator'];
foreach ($options as $key =>
$value) {
$params['id'] =
$name .
'_' .
$i++
;
if (in_array((string)
$key, $current_value, true)) {
$params['checked'] =
'checked';
unset
($params['checked']);
// <input type="checkbox" />
// <label for="id">..</label>
$input_tag .
$value, false);
// {{{ _getFormInput_File
* フォームタグを取得する(type="file")
$params['type'] =
'file';
if (isset
($def['type'])) {
$params['name'] =
is_array($def['type']) ?
$name .
'[]' :
$name;
// {{{ _getFormInput_Hidden
* フォームタグを取得する(type="hidden")
$params['type'] =
'hidden';
if (isset
($def['type'])) {
$params['name'] =
is_array($def['type']) ?
$name .
'[]' :
$name;
if (isset
($params['value'])) {
$value =
$params['value'];
} else if (isset
($params['default'])) {
$value =
$params['default'];
} else if (isset
($def['default'])) {
$value =
$def['default'];
if ($def['_form_counter'] <
count($value)) {
$params['value'] =
$value[$def['_form_counter']];
$params['value'] =
$value;
// {{{ _getFormInput_Password
* フォームタグを取得する(type="password")
$params['type'] =
'password';
if (isset
($def['type'])) {
$params['name'] =
is_array($def['type']) ?
$name .
'[]' :
$name;
if (isset
($params['value'])) {
$value =
$params['value'];
} else if (isset
($params['default'])) {
$value =
$params['default'];
} else if (isset
($def['default'])) {
$value =
$def['default'];
if ($def['_form_counter'] <
count($value)) {
$params['value'] =
$value[$def['_form_counter']];
$params['value'] =
$value;
// maxlength と フォーム定義のmax連携はサポートしない
// @see http://sourceforge.jp/ticket/browse.php?group_id=1343&tid=16325
// {{{ _getFormInput_Radio
* ラジオボタンタグを取得する(type="radio")
$params['type'] =
'radio';
if (isset
($def['type'])) {
$params['name'] =
is_array($def['type']) ?
$name .
'[]' :
$name;
if (isset
($def['option']) &&
is_array($def['option'])) {
$options =
$def['option'];
if (isset
($params['default'])) {
$current_value =
$params['default'];
} else if (isset
($def['default'])) {
$current_value =
$def['default'];
if (isset
($params['separator'])) {
$separator =
$params['separator'];
foreach ($options as $key =>
$value) {
$params['id'] =
$name .
'_' .
$i++
;
if (strcmp($current_value,$key) ===
0) {
$params['checked'] =
'checked';
unset
($params['checked']);
// <input type="radio" />
// <label for="id">..</label>
$input_tag .
$value, false);
// {{{ _getFormInput_Select
* セレクトボックスタグを取得する(type="select")
if (isset
($def['type'])) {
$params['name'] =
is_array($def['type']) ?
$name .
'[]' :
$name;
if (isset
($def['option']) &&
is_array($def['option'])) {
$options =
$def['option'];
if (isset
($params['default'])) {
$current_value =
$params['default'];
} else if (isset
($def['default'])) {
$current_value =
$def['default'];
$current_value =
array();
if (isset
($params['separator'])) {
$separator =
$params['separator'];
foreach ($options as $key =>
$value) {
$attr =
array('value' =>
$key);
$def['_form_counter'] =
empty($def['_form_counter']) ?
0 :
$def['_form_counter'];
if (isset
($params['multiple']) &&
in_array((string)
$key, $current_value, true) ||
!isset
($params['multiple']) &&
$selected ===
false &&
strcmp($current_value[$def['_form_counter']], $key) ===
0) {
$attr['selected'] =
'selected';
if (isset
($params['emptyoption'])) {
$attr =
array('value' =>
'');
if ($selected ===
false) {
$attr['selected'] =
'selected';
$params['emptyoption']));
unset
($params['emptyoption']);
$element =
$separator .
implode($separator, $contents) .
$separator;
// {{{ _getFormInput_Submit
* フォームタグを取得する(type="submit")
$params['type'] =
'submit';
if (isset
($def['type'])) {
$params['name'] =
is_array($def['type']) ?
$name .
'[]' :
$name;
if (isset
($params['value']) ===
false) {
if (isset
($def['name'])) {
$params['value'] =
$def['name'];
$params['value'] =
$params['value'][0];
// {{{ _getFormInput_Textarea
if (isset
($def['type'])) {
$params['name'] =
is_array($def['type']) ?
$name .
'[]' :
$name;
if (isset
($params['value'])) {
$element =
$params['value'];
} else if (isset
($params['default'])) {
$element =
$params['default'];
} else if (isset
($def['default'])) {
$element =
$def['default'];
if ($def['_form_counter'] <
count($element)) {
$element =
$element[$def['_form_counter']];
// {{{ _getFormInput_Text
* フォームタグを取得する(type="text")
$params['type'] =
'text';
if (isset
($def['type'])) {
$params['name'] =
is_array($def['type']) ?
$name .
'[]' :
$name;
if (isset
($params['value'])) {
$value =
$params['value'];
} else if (isset
($params['default'])) {
$value =
$params['default'];
} else if (isset
($def['default'])) {
$value =
$def['default'];
if ($def['_form_counter'] <
count($value)) {
$params['value'] =
$value[$def['_form_counter']];
$params['value'] =
$value;
// maxlength と フォーム定義のmax連携はサポートしない
// @see http://sourceforge.jp/ticket/browse.php?group_id=1343&tid=16325
// {{{ _getFormInput_Html
foreach ($this->helper_parameter_keys as $key) {
foreach ($attr as $key =>
$value) {
} else if ($escape_element) {
$r .=
sprintf('>%s</%s>', $element, $tag);
* @return object Ethna_Renderer レンダラオブジェクト
$renderer =
& $c->getRenderer();
$renderer->setPropByRef('form', $form_array);
$renderer->setPropByRef('app', $app_array);
$renderer->setPropByRef('app_ne', $app_ne_array);
$renderer->setPropByRef('errors', $message_list);
$renderer->setPropByRef('session', $tmp_session);
$renderer->setProp('script',
$renderer->setProp('request_uri',
isset
($_SERVER['REQUEST_URI'])
$renderer->setProp('config', $this->config->get());
* @param object Ethna_Renderer レンダラオブジェクト
Documentation generated on Fri, 11 Nov 2011 04:01:11 +0900 by phpDocumentor 1.4.3