>  기사  >  백엔드 개발  >  DBO 양식 위젯

DBO 양식 위젯

WBOY
WBOY원래의
2016-07-25 09:09:461215검색
이는 데이터 편집 양식을 생성하는데 사용할 수 있는 매우 유용한 구성요소입니다. MST Library 3.1의 매우 중요한 구성요소입니다. dbo 형식과 dbo 형식의 루프 중첩을 구현하고 이를 하나의 형식으로 제어할 수도 있습니다. dbo 지원 사용자 정의 위젯 구성 요소가 양식에 다시 중첩됩니다.
많은 PHP 프레임워크는 양식 생성을 함수로 작성합니다. 이는 이해할 수 있지만 양식을 생성할 때 사용자 함수를 주기적으로 호출하는 데 따른 성능 비용은 받아들일 수 없습니다. 컴파일된 코드의 성능은 다음과 같습니다. 루프 실행 기능보다 훨씬 높습니다.
게다가 대부분의 경우 우리는 데이터 개체의 구조를 알고 있으며 데이터 개체의 각 필드에 대한 값 유형을 정의했습니다. 실제로는 어떤 양식도 수동으로 작성하거나 코드를 사용하여 판단할 필요가 없습니다. , 텍스트 영역 등을 사용합니다.
  1. // 연산할 객체의 데이터
  2. // $target은 MST_DBO 기반 인스턴스여야 합니다
  3. if (!isset ($data ) || !is_object($data) || !$data 인스턴스of MST_DBO) {
  4. echo '$data는 MST_DBO 인스턴스가 아닙니다!';
  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 = strtolower($ 모델);
  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 = strtolower((string)$method);
  36. if ($method != 'get' && $method != 'post')
  37. $method = 'post';
  38. }
  39. // 업로드 여부
  40. if (!isset( $isUpload)) $isUpload = true;
  41. // 제출 버튼 텍스트 맞춤설정
  42. if (!isset($submitText)) $submitText = 'Submit';
  43. / / 라벨 부분의 너비를 사용자 정의
  44. if (!isset($headWidth)) $headWidth = 130;
  45. $headWidth = is_numeric($headWidth) && $headWidth > 0 ? >
  46. if (!isset($continueForm )) $continueForm = false;
  47. // 오버로드
  48. if (!isset($lineStart)) $lineStart = 1;
  49. ?>
  50. " method="< ;?php echo $method ?>">
  51. < ?php } ?>
  52. < ;?php
  53. $lineNum = $lineStart;
  54. $tinymceTimes = 0;
  55. foreach($columns as $key => $column) {
  56. // $column[0]을 빈 부분으로 건너뛰기
  57. if (!isset($column[0])) continue;
  58. // $column 공통 변수 행 사용자 정의
  59. $key = strtolower(trim($key));
  60. $columnId = $prefix . $key;
  61. $columnName = $prefix . = $prefix . '-' . $ key;
  62. $columnText = 비어 있음($column['title']) ? ucfirst($key) : $column['title'];
  63. $columnValue = isset( $data[$key]) ? ( 문자열)$data[$key] : (isset($column['default']) ? $column['default'] : null);
  64. if (isset($column ['forceValue'])) $columnValue = (string)$column['forceValue'];
  65. $isDisabled = isset($column['disabled']) ? $column['disabled'] : false;
  66. $isReadonly = isset($column[ 'readonly']) ? $column['readonly'] : false;
  67. if (is_object($column[0]) && $column[0] instanceof Closure) {
  68. $editType = '클로저';
  69. }
  70. else {
  71. $editType = strtolower($column[0]);
  72. }
  73. ?>
  74. < ?php
  75. if ($editType == 'dbo_form') {
  76. if (empty($column[1])) {
  77. // dbo_form 재사용 지침 누락
  78. ?>
  79. < ;tr>
  80. } else {
  81. $column[1]['continueForm'] = true;
  82. $this->widget('base/dbo_form', $column[1]);
  83. }
  84. ?>
  85. " />
  86. $lineClass = $lineNum % 2 == 0 ? 'f-line f-line-odd' : 'f-line f-line-even';
  87. ?>
  88. < ;?php
  89. }
  90. ?>
  91. dbo_form을 재사용할 수 없습니다. $column[1]에서 dbo_form 옵션을 설정하세요.
  92. widget($column[1], $column[2]); ?> ;
  93. // 開始生成form行
  94. 스위치($ editType) {
  95. case 'text' :
  96. ?>
  97. if (isset($column['max']))
  98. echo ' maxlength="',$column ['max'],'"';
  99. if ($isDisabled)
  100. echo 'disabled="disabled"';
  101. if ($isReadonly)
  102. echo ' readonly="readonly"';
  103. ?>/>
  104. break;
  105. case 'smalltextarea' :
  106. ?>
  107. break;
  108. case 'longtext' :
  109. ?>
  110. if (isset($column['max']))
  111. echo ' maxlength="',$column ['max'],'"';
  112. if ($isDisabled)
  113. echo 'disabled="disabled"';
  114. if ($isReadonly)
  115. echo ' readonly="readonly"';
  116. ?>/>
  117. break;
  118. case 'upload' :
  119. ?>
  120. break;
  121. case 'password' :
  122. ?>
  123. if (isset($column['max']))
  124. echo ' maxlength="'.$column ['max'].'"';
  125. if ($isDisabled)
  126. echo 'disabled="disabled"';
  127. if ($isReadonly)
  128. echo ' readonly="readonly"';
  129. ?>/>
  130. break;
  131. case 'textarea' :
  132. ?>
  133. break;
  134. case 'select' :
  135. $options = isset($column['options']) ? $column['options'] : array();
  136. $optionsType = isset($column['optionsType']) ? $column['optionsType'] : 'map';
  137. // 向前兼容:0 -> 지도, 1 -> 목록
  138. if (is_numeric($optionsType)) $optionsType = $optionsType > 0? 'list' : 'map';
  139. ?>
  140. break;
  141. case 'radiogroup' :
  142. $maps = isset($column['maps']) ? $column['maps'] : array();
  143. $mapsType = isset($column['mapsType']) ? $column['mapsType'] : 'map';
  144. // 向前兼容:0 -> map, 1 -> list
  145. if (is_numeric($mapsType)) $mapsType = $mapsType > 0 ? 'list' : 'map';
  146. ?>
  147. $index = 0;
  148. foreach ($maps as $key => $map) {
  149. $index++;
  150. ?>
  151. " class="f-radio" value="" />
  152. " class="f-radio" value="" />
  153. }
  154. ?>
  155. break;
  156. case 'datetime':
  157. $format = 비어 있음($column['dateFormat']) ? 'Y-m-d H:i:s' : $column['dateFormat'];
  158. $jsFormat = 비어 있음($column['jsFormat']) ? '%Y-%m-%d %H:00' : $column['jsFormat'];
  159. $pickSize = isset($column['pickSize']) ? intval($column['pickSize']) : 2;
  160. if ($columnValue > 0) {
  161. if (is_numeric($columnValue)) {
  162. $dtStr = date($format, $columnValue );
  163. $dtVal = $columnValue;
  164. }
  165. else {
  166. $dtStr = $columnValue;
  167. $dtVal = MST_String::date2num($columnValue);
  168. }
  169. }
  170. else {
  171. $dtStr = 0;
  172. $dtVal = 0;
  173. }
  174. if (is_numeric($dtVal) && $dtVal > 0)
  175. $dtStr = 날짜($format, $dtVal);
  176. ?>
  177. type="text"
  178. id="_str "
  179. class="f-text f-dt "
  180. value=""
  181. />
  182. type="hidden"
  183. name=""
  184. id=""
  185. value=""
  186. />
  187. break;
  188. case 'tinymce' :
  189. $tinymceTimes ;
  190. ?>
  191. script('tiny_mce/tiny_mce.js'); ?>
  192. break;
  193. case 'widget' :
  194. $this->widget($column[1], $column[2]) ;
  195. 중단;
  196. }
  197. $lineNum ;
  198. ?>
  199. $index = 0;
  200. foreach ($submitText as $btnId => $btnText) {
  201. $index ;
  202. ?>
  203. validCode($prefix, 'input'); ?>
  204. < ;?php
  205. }
  206. }
  207. ?>
复代码
  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' => '이름', 'require' => 1, 'min' => 1, 'max' => 32),
  5. '성' => array('text','title' => '성', 'require' => 1, 'min' => 1, 'max' => 32),
  6. 'avator ' => array('title' => 'Avator', 'max' => 256),
  7. 'age_group' => array('title' => '연령대', '필수' => 1),
  8. '비밀' => array('textarea','title' => '비밀', 'require' => 1, 'min' => 10, 'max' => 600),
  9. );
  10. 공용 함수 getFormColumns() {
  11. if (GB_PERSSIONS == Region::ROOT) {
  12. $columns['region_id'] = array(
  13. '선택',
  14. '제목' => '지역',
  15. 'optionsType' => '목록',
  16. '옵션' => , array('select' => 'id, name')),
  17. );
  18. }
  19. else {
  20. $columns['region_id'] = array(
  21. '숨김' ,
  22. '기본값' => GB_PERSSIONS,
  23. );
  24. }
  25. $columns = array_merge($columns,self::$columns);
  26. $columns['age_group'] = array('widget', 'base/age_group', array(
  27. 'prefix' => '평가',
  28. ), '제목' => '연령대');
  29. $columns['avator'] = array('widget', 'base/testmonial_upload', array(
  30. 'prefix' => '추천',
  31. ), ' title' => 'Avator');
  32. return $columns;
  33. }
  34. public function beforeCreate(& $data) {
  35. $data['created_at'] = time();
  36. }
  37. public function getAge() {
  38. $ageGroup = array(
  39. 0 => '--',
  40. 1 => '18세 미만 ',
  41. 2 => '19 ? 25',
  42. 4 => '36 ? 45' ? 55',
  43. 6 => '56 이상',
  44. );
  45. return isset($ageGroup[$this['age_group']]) ? $ageGroup[$this['age_group']] : $ageGroup[0];
  46. }
  47. 공개 함수 getAvator() {
  48. return empty($this['avator']) ? httpUri('images/avator.png') : httpUri($this['avator']);
  49. }
  50. // 这是对MST_DBO적find적 방법적 집합
  51. static public function find($args = array(), $params = null, $isArray = false) {
  52. if (defined('GB_PERSSIONS') && GB_PERSSIONS == Region::ROOT) {
  53. self::initFind( $args, $params, $isArray);
  54. return parent::find($args, $params, $isArray);
  55. }
  56. else {
  57. self::initFind($args, $ params, $isArray);
  58. if (isset($args['where'])) {
  59. $args['where'][0] .= ' AND 지역 ID = ?';
  60. $args ['where'][] = GB_PERSSIONS;
  61. }
  62. else {
  63. $args['where'] = array('region_id = ?', GB_PERSSIONS);
  64. }
  65. 부모 반환 ::find($args, $params, $isArray);
  66. }
  67. }
  68. }
复代码
DBO 양식 위젯
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.