ホームページ  >  記事  >  バックエンド開発  >  DBO フォーム ウィジェット

DBO フォーム ウィジェット

WBOY
WBOYオリジナル
2016-07-25 09:09:461214ブラウズ
これは、データ編集フォームを生成するために使用できる非常に便利なコンポーネントであり、dbo フォームと dbo フォームのループネストを実現し、それを 1 つのフォームで制御することができます。 dbo をサポート カスタム ウィジェット コンポーネントがフォーム内で再びネストされます。
多くの PHP フレームワークが関数内でフォーム生成を記述することは理解できますが、フォーム生成時にユーザー関数を循環的に呼び出すことによるパフォーマンス コストを受け入れることはできません。この場合、コードのパフォーマンスは PHP と HTML を組み合わせたものよりもはるかに高くなります。ループ実行機能のことです。
さらに、ほとんどの場合、データ オブジェクトの構造がわかっており、データ オブジェクトの各フィールドの値の型を定義しているため、手動でフォームを作成したり、選択を使用してコードを使用したりする必要はありません。 、textareaか何かを使用します。
  1. //操作対象のオブジェクトのデータ
  2. // $target は MST_DBO に基づくインスタンスである必要があります
  3. if (!isset($data) || !is_object($data) || ! $data instanceof MST_DBO) {
  4. echo '$data not a MST_DBO instance!';
  5. }
  6. else {
  7. // 関連するモジュールを取得します
  8. $model = get_class($data);
  9. // $columns を定義します
  10. //定義でない場合は、MST_DBO インターフェースに従ってデフォルトで取得されます
  11. if (!isset($columns))
  12. $columns = $data->getFormColumns($data);
  13. if (empty($columns) || !is_array( $columns) ) {
  14. echo 'フォーム列の定義を解除します!';
  15. }
  16. else {
  17. // このモジュールのプレフィックスを生成します
  18. if (!isset($prefix))
  19. $prefix = strto lower($model);
  20. else
  21. $prefix = MST_String::tableize($prefix);
  22. if (!isset($id))
  23. $id = $prefix .
  24. if (!isset($class))
  25. $class = $prefix . '-form';
  26. $errors = $data->getErrors();
  27. // フォーム設定を初期化します
  28. // 送信されたアクションをカスタマイズします
  29. if (!isset($action))
  30. $action = $this- >params->uri;
  31. // メソッド
  32. if (!isset($method))
  33. $method = 'post';
  34. else {
  35. $method = strto lower((string)$method);
  36. if ( $method != 'get' && $method != 'post')
  37. $method = 'post';
  38. }
  39. // アップロードする必要がありますか if (!isset($isUpload)) $isUpload = true;
  40. // 送信ボタンのテキストをカスタマイズします
  41. if (!isset($submitText)) $submitText = 'Submit';
  42. // ラベル部分の幅をカスタマイズします
  43. if (!isset($headWidth) )) $headWidth = 130;
  44. $ headWidth = is_numeric($headWidth) && $headWidth > 0 ? $headWidth : 120;
  45. if (!isset($ continueForm)) $ continueForm = false;
  46. // オーバーロード
  47. if (!isset($lineStart )) $lineStart = 1;
  48. ?>
  49. >
  50. < ?php } ?>
  51. $lineNum = $lineStart;
  52. $tinymceTimes = 0;
  53. foreach ($columns as $key => $column) {
  54. // $column[0] を空の部分としてスキップします
  55. if (!isset($column[0])) continue;
  56. // $column 共通変数の行をカスタマイズします
  57. $key = strto lower(trim($key));
  58. $columnId = $prefix .$key;
  59. $columnName = $key . ']';
  60. $columnClass = '-' .$columnText = 空($column['title' ]) ? ucfirst($key) : $column['title'];
  61. $columnValue = isset($data[$key]) : (isset) ($column['default' ]) ? $column['default'] : null);
  62. if (isset($column['forceValue'])) $columnValue = (string)$column['forceValue'];
  63. $isDisabled = isset($column ['disabled']) $column['disabled'] : false;
  64. $isReadonly = isset($column['readonly']) : false;
  65. if (is_object($column [0]) && $column[0]instanceof Closure) {
  66. $editType = 'closure';
  67. }
  68. else {
  69. $editType = strto lower($column[0]);
  70. }
  71. ?>
  72. if ($editType == 'dbo_form') {
  73. if (empty($column[1])) {
  74. // dbo_form 再利用命令がありません
  75. ?>
  76. } else {
  77. $ column[1][' continueForm '] = true;
  78. $this->widget('base/dbo_form', $column[1]);
  79. }
  80. ?>
  81. widget($column[ 1], $column[2]); ?>
  82. " />
  83. $lineClass = $lineNum % 2 == 0 ? 'f-line f-line-odd' : 'f-line f-line-even';
  84. ?>
  85. }
  86. ?>
  87. dbo_form は再利用できません。$column[1] で dbo_form オプションを設定してください。
  88. // 生成開始form行
  89. switch ($editType) {
  90. case 'text' :
  91. ?>
  92. if (isset($column['max']))
  93. echo ' maxlength="',$column['max' ],'"';
  94. if ($isDisabled)
  95. echo 'disabled="disabled"';
  96. if ($isReadonly)
  97. echo ' readonly="readonly"';
  98. ?>/>
  99. Break;
  100. case 'smalltextarea' :
  101. ?>
  102. break;
  103. case 'longtext' :
  104. ?>
  105. if (isset($column['max']))
  106. echo ' maxlength="',$column['max' ],'"';
  107. if ($isDisabled)
  108. echo 'disabled="disabled"';
  109. if ($isReadonly)
  110. echo ' readonly="readonly"';
  111. ?>/>
  112. Break;
  113. case 'upload' :
  114. ?>
  115. Break;
  116. case 'password' :
  117. ?>
  118. if (isset($column['max']))
  119. echo ' maxlength="'.$column['max' ].'"';
  120. if ($isDisabled)
  121. echo 'disabled="disabled"';
  122. if ($isReadonly)
  123. echo ' readonly="readonly"';
  124. ?>/>
  125. Break;
  126. case 'textarea' :
  127. ?>
  128. break;
  129. case 'select' :
  130. $options = isset($column['options']) ? $column['options'] : array();
  131. $optionsType = isset($column['optionsType']) ? $column['optionsType'] : 'map';
  132. // 向前兼容:0 ->マップ、1 -> list
  133. if (is_numeric($optionsType)) $optionsType = $optionsType > 0 ? 'リスト' : 'マップ';
  134. ?>
  135. break;
  136. case 'radiogroup' :
  137. $maps = isset($column['maps']) ? $column['maps'] : array();
  138. $mapsType = isset($column['mapsType']) ? $column['mapsType'] : 'map';
  139. // 向前兼容:0 -> map, 1 -> list
  140. if (is_numeric($mapsType)) $mapsType = $mapsType > 0 ? 'list' : 'map';
  141. ?>
  142. $index = 0;
  143. foreach ($maps as $key => $map) {
  144. $index++;
  145. ?>
  146. " class="f-radio" value="" />
  147. " class="f-radio" value="" />
  148. }
  149. ?>
  150. break;
  151. case 'datetime':
  152. $format = empty($column['dateFormat']) ? 'Y-m-d H:i:s' : $column['dateFormat'];
  153. $jsFormat = empty($column['jsFormat']) ? '%Y-%m-%d %H:00' : $column['jsFormat'];
  154. $pickSize = isset($column['pickSize']) ? intval($column['pickSize']) : 2;
  155. if ($columnValue > 0) {
  156. if (is_numeric($columnValue)) {
  157. $dtStr = date($format, $columnValue);
  158. $dtVal = $columnValue;
  159. }
  160. else {
  161. $dtStr = $columnValue;
  162. $dtVal = MST_String::date2num($columnValue);
  163. }
  164. }
  165. else {
  166. $dtStr = 0;
  167. $dtVal = 0;
  168. }
  169. if (is_numeric($dtVal) && $dtVal > 0)
  170. $dtStr = date($format, $dtVal);
  171. ?>
  172. type="text"
  173. id="_str"
  174. class="f-text f-dt "
  175. />
  176. type="hidden"
  177. name=""
  178. id=""
  179. value=""
  180. />
  181. Break;
  182. case 'tinymce' :
  183. $tinymceTimes++;
  184. ?>
  185. script('tiny_mce/tiny_mce.js'); ?>
  186. Break;
  187. case 'ウィジェット' :
  188. $this->widget($column[1], $column[2]);
  189. Break;
  190. }
  191. $ lineNum++;
  192. ?>
  193. $index = 0;
  194. foreach ($submitText as $btnId => $btnText) {
  195. $index++;
  196. ?>
  197. validCode($prefix, 'input'); ?>
  198. }
  199. }
  200. ?>
复制代
  1. $this->widget('base/dbo_form', array(
  2. 'data' => $this->list,
  3. ));
复制代
  1. class Testimonial extends MST_DBO {
  2. protected static
  3. $columns = array(
  4. 'firstname' => array('text','title' => 'First Name', ' require' => 'min' => 'max' => 32),
  5. 'lastname' => '姓' ' => 1, 'min' => 1, 'avator' => array('title' => 'max' => 256) ,
  6. 'age_group' => array('title' => '年齢層', 'require' => 1),
  7. 'secret' => array('textarea','title' => ' Secret', 'require' => 1, 'min' => 600),
  8. public function getFormColumns() {
  9. if (GB_PERSSIONS == 地域::ROOT) {
  10. $columns['region_id'] = array(
  11. 'select',
  12. 'title' => ' リージョン ',
  13. 'optionsType' => 'list',
  14. 'options' => リージョン::find ('all', array('select' => 'id, name')),
  15. );
  16. }
  17. else {
  18. $columns['region_id'] = array(
  19. 'hidden',
  20. 'default' = > GB_PERSSIONS,
  21. );
  22. }
  23. $columns = array_merge($columns,self::$columns);
  24. $columns['age_group'] = array('widget', 'base/age_group', array(
  25. 'プレフィックス' => '体験談',
  26. ), 'タイトル' => '年齢層');
  27. $columns['avator'] = array('widget', 'base/testmonial_upload', array(
  28. 'prefix' => 'testimonial',
  29. ), 'title' => ' Avator');
  30. return $columns;
  31. }
  32. public function beforeCreate(& $data) {
  33. $data['created_at'] = time();
  34. }
  35. public function getAge() {
  36. $ageGroup = array(
  37. 0 => '--',
  38. 1 => '18 歳未満',
  39. 2 => '19 ? 25',
  40. 3 => '26 ? 35',
  41. 4 => ' 36 ? 45',
  42. 5 => '46 ? 55',
  43. 6 => '56 以上',
  44. return isset($this['age_group']]) ? $ageGroup[$this['age_group']] : $ageGroup[0];
  45. }
  46. public function getAvator() {
  47. return empty($this['avator']) ? httpUri('images/avator.png') : httpUri($this['avator']);
  48. }
  49. // これは MST_DBO の検索方法の重ロード
  50. static public function find($args = array( ), $params = null, $isArray = false) {
  51. if (define('GB_PERSSIONS') && GB_PERSSIONS == Regional::ROOT) {
  52. self::initFind($args, $params, $isArray);
  53. return parent::find($args, $params, $isArray);
  54. }
  55. else {
  56. self::initFind($args, $params, $isArray);
  57. if (isset($args['where'])) {
  58. $args['where'][0] .= ' AND リージョン ID = ?';
  59. $args['where'][] = GB_PERSSIONS;
  60. }
  61. else {
  62. $args['where'] = array( 'region_id = ?', GB_PERSSIONS);
  63. }
  64. returnparent::find($args, $params, $isArray);
  65. }
  66. }
  67. }
  68. 复制代
DBO フォーム ウィジェット
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。