AppadminbaseBlockEdit.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339
  1. <?php
  2. /**
  3. * FecShop file.
  4. *
  5. * @link http://www.fecshop.com/
  6. * @copyright Copyright (c) 2016 FecShop Software LLC
  7. * @license http://www.fecshop.com/license/
  8. */
  9. namespace fecshop\app\appadmin\modules;
  10. use fec\helpers\CRequest;
  11. use fecshop\app\appadmin\interfaces\base\AppadminbaseBlockEditInterface;
  12. use Yii;
  13. use yii\base\BaseObject;
  14. /**
  15. * @author Terry Zhao <2358269014@qq.com>
  16. * @since 1.0
  17. */
  18. class AppadminbaseBlockEdit extends BaseObject
  19. {
  20. public $_param;
  21. public $_primaryKey;
  22. public $_one;
  23. public $_service;
  24. public $_textareas;
  25. public $_lang_attr;
  26. /**
  27. * html input or text etc. , html name like: <input name="XXXX" />.
  28. */
  29. protected $_editFormData;
  30. public function init()
  31. {
  32. if (!($this instanceof AppadminbaseBlockEditInterface)) {
  33. echo json_encode([
  34. 'statusCode'=>'300',
  35. 'message'=>'Manageredit must implements fecshop\app\appadmin\interfaces\base\AppadminbaseBlockEditInterface',
  36. ]);
  37. exit;
  38. }
  39. $this->_editFormData = 'editFormData';
  40. $this->setService();
  41. $this->_param = CRequest::param();
  42. $this->_primaryKey = $this->_service->getPrimaryKey();
  43. $id = $this->_param[$this->_primaryKey];
  44. $this->_one = $this->_service->getByPrimaryKey($id);
  45. }
  46. public function getVal($name, $column)
  47. {
  48. return ($this->_one[$name] || $this->_one[$name] === 0) ? $this->_one[$name] : $column['default'];
  49. }
  50. public function getEditBar($editArr = [])
  51. {
  52. $langs = Yii::$service->fecshoplang->getAllLangCode();
  53. $defaultLangCode = Yii::$service->fecshoplang->defaultLangCode;
  54. // xhEditor编辑器里面上传图片和其他的类型的url以及允许的文件类型
  55. // fecshop只实现了image的上传,其他类型的自己实现。
  56. $upImgUrl = Yii::$service->admin->getXhEditorUploadImgUrl();
  57. $upImgFormat = Yii::$service->admin->getXhEditorUploadImgForamt();
  58. $upFlashUrl = Yii::$service->admin->getXhEditorUploadFlashUrl();
  59. $upFlashFormat = Yii::$service->admin->getXhEditorUploadFlashFormat();
  60. $upLinkUrl = Yii::$service->admin->getXhEditorUploadLinkUrl();
  61. $upLinkFormat = Yii::$service->admin->getXhEditorUploadLinkFormat();
  62. $upMediaUrl = Yii::$service->admin->getXhEditorUploadMediaUrl();
  63. $upMediaFormat = Yii::$service->admin->getXhEditorUploadMediaFormat();
  64. if (empty($editArr)) {
  65. $editArr = $this->getEditArr();
  66. }
  67. $str = '';
  68. $langAndTextarea = '';
  69. if ($this->_param[$this->_primaryKey]) {
  70. $str = <<<EOF
  71. <input type="hidden" value="{$this->_param[$this->_primaryKey]}" size="30" name="{$this->_editFormData}[{$this->_primaryKey}]" class="textInput ">
  72. EOF;
  73. }
  74. $idsj = md5(time());
  75. $idsji = 0;
  76. foreach ($editArr as $column) {
  77. $name = $column['name'];
  78. $remark = Yii::$service->page->translate->__($column['remark']);
  79. $require = $column['require'] ? 'required' : '';
  80. $label = $column['label'] ? $column['label'] : $this->_one->getAttributeLabel($name);
  81. $display = isset($column['display']) ? $column['display'] : '';
  82. if (empty($display)) {
  83. $display = ['type' => 'inputString'];
  84. }
  85. //var_dump($this->_one['id']);
  86. $value = $this->getVal($name, $column);
  87. $display_type = isset($display['type']) ? $display['type'] : 'inputString';
  88. if ($display_type == 'inputString') {
  89. $isLang = isset($display['lang']) ? $display['lang'] : false;
  90. if ($isLang && is_array($langs) && !empty($langs)) {
  91. $tabLangTitle = '';
  92. $tabLangInput = '';
  93. foreach ($langs as $lang) {
  94. if ($require && $defaultLangCode === $lang) {
  95. $inputStringLangRequire = 'required';
  96. } else {
  97. $inputStringLangRequire = 0;
  98. }
  99. $tabLangTitle .= '<li><a href="javascript:;"><span>'.$lang.'</span></a></li>';
  100. $langAttrName = Yii::$service->fecshoplang->getLangAttrName($name, $lang);
  101. $t_val = isset($value[$langAttrName]) ? $value[$langAttrName] : '';
  102. // 对于含有 " 的字符串进行处理
  103. $t_val = str_replace('"', '&quot;', $t_val) ;
  104. $tabLangInput .= '<div>
  105. <p class="edit_p">
  106. <label>'.$label.'['.$lang.']:</label>
  107. <input type="text" value="'.$t_val.'" size="30" name="'.$this->_editFormData.'['.$name.']['.$langAttrName.']" class="textInput '.$inputStringLangRequire.' ">
  108. <span class="remark-text">'.$remark .'</span>
  109. </p>
  110. </div>';
  111. }
  112. $this->_lang_attr .= <<<EOF
  113. <div class="tabs" currentIndex="0" eventType="click" style="margin:10px 0;">
  114. <div class="tabsHeader">
  115. <div class="tabsHeaderContent">
  116. <ul>
  117. {$tabLangTitle}
  118. </ul>
  119. </div>
  120. </div>
  121. <div class="tabsContent" style="">
  122. {$tabLangInput}
  123. </div>
  124. <div class="tabsFooter">
  125. <div class="tabsFooterContent"></div>
  126. </div>
  127. </div>
  128. EOF;
  129. } else {
  130. // 对于含有 " 的字符串进行处理
  131. $value = str_replace('"', '&quot;', $value) ;
  132. $str .= <<<EOF
  133. <p class="edit_p">
  134. <label>{$label}:</label>
  135. <input type="text" value="{$value}" size="30" name="{$this->_editFormData}[{$name}]" class="textInput {$require} ">
  136. <span class="remark-text">{$remark}</span>
  137. </p>
  138. EOF;
  139. }
  140. } elseif ($display_type == 'inputDate') {
  141. if ($value && !is_numeric($value)) {
  142. $value = strtotime($value);
  143. }
  144. $valueData = $value ? date('Y-m-d', $value) : '';
  145. $str .= <<<EOF
  146. <p class="edit_p">
  147. <label>{$label}:</label>
  148. <input type="text" value="{$valueData}" size="30" name="{$this->_editFormData}[{$name}]" class="date textInput {$require} ">
  149. <span class="remark-text">{$remark}</span>
  150. </p>
  151. EOF;
  152. } elseif ($display_type == 'inputDateTime') {
  153. if ($value && !is_numeric($value)) {
  154. $value = strtotime($value);
  155. }
  156. $valueData = $value ? date('Y-m-d H:i:s', $value) : '';
  157. $str .= <<<EOF
  158. <p class="edit_p">
  159. <label>{$label}:</label>
  160. <input type="text" datefmt="yyyy-MM-dd HH:mm:ss" value="{$valueData}" size="30" name="{$this->_editFormData}[{$name}]" class="date textInput {$require} ">
  161. <span class="remark-text">{$remark}</span>
  162. </p>
  163. EOF;
  164. } elseif ($display_type == 'inputEmail') {
  165. $str .= <<<EOF
  166. <p class="edit_p">
  167. <label>{$label}:</label>
  168. <input type="text" value="{$value}" size="30" name="{$this->_editFormData}[{$name}]" class="email textInput {$require} ">
  169. <span class="remark-text">{$remark}</span>
  170. </p>
  171. EOF;
  172. } elseif ($display_type == 'stringText') {
  173. $str .= <<<EOF
  174. <p class="edit_p">
  175. <label>{$label}:</label>
  176. {$value}
  177. <span class="remark-text">{$remark}</span>
  178. </p>
  179. EOF;
  180. } elseif ($display_type == 'inputPassword') {
  181. $str .= <<<EOF
  182. <p class="edit_p">
  183. <label>{$label}:</label>
  184. <input type="password" value="" size="30" name="{$this->_editFormData}[{$name}]" class=" textInput {$require} ">
  185. <span class="remark-text">{$remark}</span>
  186. </p>
  187. EOF;
  188. } elseif ($display_type == 'select') {
  189. $data = isset($display['data']) ? $display['data'] : '';
  190. //var_dump($data);
  191. //echo $value;
  192. $select_str = '';
  193. if (is_array($data)) {
  194. $select_str .= <<<EOF
  195. <select class="select_{$name} combox {$require}" name="{$this->_editFormData}[{$name}]" >
  196. EOF;
  197. $select_str .= '<option value="">'.$label.'</option>';
  198. foreach ($data as $k => $v) {
  199. if ($value == $k) {
  200. //echo $value."#".$k;
  201. $select_str .= '<option selected="selected" value="'.$k.'">'.$v.'</option>';
  202. } else {
  203. $select_str .= '<option value="'.$k.'">'.$v.'</option>';
  204. }
  205. }
  206. $select_str .= '</select>';
  207. }
  208. $str .= <<<EOF
  209. <p class="edit_p">
  210. <label>{$label}:</label>
  211. {$select_str}
  212. <span class="remark-text">{$remark}</span>
  213. </p>
  214. EOF;
  215. } elseif ($display_type == 'editSelect') {
  216. $data = isset($display['data']) ? $display['data'] : '';
  217. //var_dump($data);
  218. //echo $value;
  219. $select_str = '';
  220. if (is_array($data)) {
  221. $idsji++;
  222. $selectId = $idsj.$idsji;
  223. $select_str .= <<<EOF
  224. <select id="{$selectId}" class=" {$require}" name="{$this->_editFormData}[{$name}]" >
  225. EOF;
  226. $select_str .= '<option value="">'.$label.'</option>';
  227. $editSelectChosen = false;
  228. foreach ($data as $k => $v) {
  229. if ($value == $k) {
  230. //echo $value."#".$k;
  231. $select_str .= '<option selected value="'.$k.'">'.$v.'</option>';
  232. $editSelectChosen = true;
  233. } else {
  234. $select_str .= '<option value="'.$k.'">'.$v.'</option>';
  235. }
  236. }
  237. if (!$editSelectChosen) {
  238. $select_str .= '<option selected value="'.$value.'">'.$value.'</option>';
  239. }
  240. $select_str .= '</select>';
  241. }
  242. $str .= <<<EOF
  243. <p class="edit_p">
  244. <label>{$label}:</label>
  245. {$select_str}
  246. <span class="remark-text">{$remark}</span>
  247. </p>
  248. <script type="text/javascript">
  249. $('#{$selectId}').editableSelect(
  250. { filter: false }
  251. );
  252. </script>
  253. EOF;
  254. } elseif ($display_type == 'textarea') {
  255. $notEditor = isset($display['notEditor']) ? $display['notEditor'] : false;
  256. $edittorClass='editor';
  257. if ($notEditor) {
  258. $edittorClass='';
  259. }
  260. $rows = isset($display['rows']) ? $display['rows'] : 15;
  261. $cols = isset($display['cols']) ? $display['cols'] : 110;
  262. $isLang = isset($display['lang']) ? $display['lang'] : false;
  263. $uploadImgUrl = 'upimgurl="'.Yii::$service->url->getUrl($upImgUrl).'" upimgext="' . $upImgFormat . '"';
  264. $uploadFlashUrl = 'upflashurl="'.Yii::$service->url->getUrl($upFlashUrl).'" upflashext="' . $upFlashFormat . '"';
  265. $uploadLinkUrl = 'uplinkurl="'.Yii::$service->url->getUrl($upLinkUrl).'" uplinkext="' . $upLinkFormat . '"';
  266. $uploadMediaUrl = 'upmediaurl="'.Yii::$service->url->getUrl($upMediaUrl).'" upmediaext:"' . $upMediaFormat . '" ';
  267. if ($isLang && is_array($langs) && !empty($langs)) {
  268. $tabLangTitle = '';
  269. $tabLangTextarea = '';
  270. foreach ($langs as $lang) {
  271. $langAttrName = Yii::$service->fecshoplang->getLangAttrName($name, $lang);
  272. if ($require && $defaultLangCode === $lang) {
  273. $inputStringLangRequire = 'required';
  274. } else {
  275. $inputStringLangRequire = 0;
  276. }
  277. $tabLangTitle .= '<li><a href="javascript:;"><span>'.$lang.'</span></a></li>';
  278. $tabLangTextarea .= '
  279. <div>
  280. <fieldset id="fieldset_table_qbe">
  281. <legend style="color:#009688">'.$label.'['.$lang.']:</legend>
  282. <div>
  283. <div class="unit">
  284. <textarea '.$uploadImgUrl.' '.$uploadFlashUrl.' '.$uploadLinkUrl.' '.$uploadMediaUrl.' class="'.$edittorClass.' '.$inputStringLangRequire.'" rows="'.$rows.'" cols="'.$cols.'" name="'.$this->_editFormData.'['.$name.']['.$langAttrName.']" style="width:98%" >'.$value[$langAttrName].'</textarea>
  285. </div>
  286. </div>
  287. </fieldset>
  288. </div>';
  289. }
  290. $this->_textareas .= <<<EOF
  291. <div class="tabs" currentIndex="0" eventType="click" style="margin:10px 0;">
  292. <div class="tabsHeader">
  293. <div class="tabsHeaderContent">
  294. <ul>
  295. {$tabLangTitle}
  296. </ul>
  297. </div>
  298. </div>
  299. <div class="tabsContent" style="">
  300. {$tabLangTextarea}
  301. <span class="remark-text">{$remark}</span>
  302. </div>
  303. <div class="tabsFooter">
  304. <div class="tabsFooterContent"></div>
  305. </div>
  306. </div>
  307. EOF;
  308. } else {
  309. $this->_textareas .= <<<EOF
  310. <fieldset id="fieldset_table_qbe">
  311. <legend style="color:#009688">{$label}:</legend>
  312. <div>
  313. <textarea class="{$edittorClass}" name="{$this->_editFormData}[{$name}]" rows="{$rows}" cols="{$cols}" name="{$this->_editFormData}[{$name}]" {$uploadImgUrl} {$uploadFlashUrl} {$uploadLinkUrl} {$uploadMediaUrl} >{$value}</textarea>
  314. <span class="remark-text">{$remark}</span>
  315. </div>
  316. </fieldset>
  317. EOF;
  318. }
  319. }
  320. }
  321. return $str;
  322. }
  323. }