phpcms添加多文本属性字段

为什么说是在PHPCMS V9上新增了通用性强,不限列数、不限文本组个数的多文本字段类型?

由于网上目前搜到的PHPCMS V9 多文本字段,字段名称在设计字段的时候已经定义了,这样局限性就比较大。原因如下:

其一:一篇文章中想添加一个有两列的多文本字段,就需要再去重新设计;

其二:另一模型中的文章需要添加一个 三列的多文本字段,需要再重新设计一个字段;

其三:一篇 文章中需要多个文本组,会有各种冲突。

下面来看看新增的通用性强,不限列数、不限文本组个数的多文本字段(我这里给它命名为“信息表格”)前后台的效果:

字段添加:

字段修改(相关参数中表格列名必填,列名为表格每列的名称,一行代表一个列名):

文章内容添加:

文章内容编辑:

前台文章显示:

下面来看看新增的“信息表格”字段类型添加方法:

一、打开phpcms\modules\content\fields\fields.inc.php文件,增加字段类型:'tabletext'=>'信息表格',

二、在phpcms\modules\content\fields目录下,新建文件夹tabletext

三、在tabletext目录下,新建PHP文件config.inc.php,代码如下:

 
  1. <?php

  2. defined('IN_ADMIN') or exit('No permission resources.');

  3.  
  4. $field_type = 'mediumtext'; //字段数据库类型

  5. $field_basic_table = 0; //是否允许作为主表字段

  6. $field_allow_index = 0; //是否允许建立索引

  7. $field_minlength = 0; //字符长度默认最小值

  8. $field_maxlength = ''; //字符长度默认最大值

  9. $field_allow_search = 0; //作为搜索条件

  10. $field_allow_fulltext = 0; //作为全站搜索信息

  11. $field_allow_isunique = 0; //是否允许值唯一

  12. ?>

四、在tabletext目录下,新建PHP文件field_add_form.inc.php,代码如下:

 
  1. <table cellpadding="2" cellspacing="1" width="98%">

  2. <tr>

  3. <td width="100">表格列名</td>

  4. <td><textarea name="setting[column]" cols="20" id="column" style="height:100px;width:200px;"><?php echo $setting['column'];?></textarea>表格每列的名称,一行代表一个列名</td>

  5. </tr>

  6. </table>

五、在tabletext目录下,新建PHP文件field_edit_form.inc.php,代码如下:

 
  1. <?php defined('IN_PHPCMS') or exit('No permission resources.');?>

  2. <table cellpadding="2" cellspacing="1" width="98%">

  3. <tr>

  4. <td width="100">表格列名</td>

  5. <td><textarea name="setting[column]" cols="20" id="column" style="height:100px;width:200px;"><?php echo $setting['column'];?></textarea>表格每列的名称,一行代表一个列名</td>

  6. </tr>

  7. </table>

六、在tabletext目录下,新建PHP文件form.inc.php,代码如下:

 
  1. function tabletext($field, $value, $fieldinfo) {

  2. extract(string2array($fieldinfo['setting']));

  3. $columns = explode("\n",$this->fields[$field]['column']);

  4. $list_str = '';

  5. if($value) {

  6. $value = string2array(html_entity_decode($value,ENT_QUOTES));

  7. if(is_array($value)) {

  8. foreach($value as $_k=>$_v) {

  9. $list_str .= "<tr>";

  10. for ($x=1; $x<=count($columns); $x++) {

  11. $list_str .="<td><input type='text' name='".$field."_".$x."[]' value='".$_v[$field."_".$x]."' class='input-text' style='width:100%; padding:0; height:22px;'></td>";

  12. }

  13. $list_str .= "<td><input type='button' class='button' value='删除' onclick='delThisAttr(this)'> <input type='button' class='button' value='↑上移' onclick='moveUp(this)'> <input type='button' class='button' value='↓下移' onclick='moveDown(this)'></td></tr>";

  14. }

  15. }

  16. }

  17.  
  18. $string ='<script type=text/javascript>

  19. function add'.$field.'(id){

  20. var html = "<tr>';

  21. for($cols=1; $cols<=count($columns); $cols++){

  22. $string .='<td><input type=\'text\' name=\''.$field.'_'.$cols.'[]\' value=\'\' class=\'input-text\' style=\'width:100%; padding:0; height:22px;\'></td>';

  23. }

  24. $string .='<td><input type=\'button\' class=\'button\' value=\'删除\' onclick=\'delThisAttr(this)\'> <input type=\'button\' class=\'button\' value=\'↑上移\' onclick=\'moveUp(this)\'> <input type=\'button\' class=\'button\' value=\'↓下移\' onclick=\'moveDown(this)\'></td></tr>";

  25. $("#"+id).before(html);

  26. }

  27. </script>';

  28. $string .= '<input name="info['.$field.']" type="hidden" value="1">

  29. <fieldset class="blue pad-10">

  30. <legend>列表</legend><div class="table-list"><table width="100%" cellspacing="0"><thead><tr align="left"> ';

  31.  
  32. foreach($columns as $column){

  33. $string .="<th align='left' style='text-align:left; padding:0 0 0 12px; border-bottom: 1px solid #d5dfe8;'>".$column."</th>";

  34. }

  35. $string .="<th align='left' style='text-align:left; padding:0 0 0 12px; border-bottom: 1px solid #d5dfe8; width:150px;'>操作</th></tr></thead><tbody>";

  36.  
  37. $string .= $list_str;

  38.  
  39. $string .= "<tr id='".$field."'></tr></tbody>

  40. </table></div>

  41. </fieldset>

  42. <div class='bk10'></div>";

  43. $string .= "<input type=\"button\" class=\"button\" value=\"添加一行\" onclick=\"add".$field."('".$field."')\">";

  44. return $string;

  45. }

七、在tabletext目录下,新建PHP文件input.inc.php,代码如下:

 
  1. function tabletext($field, $value) {

  2. $setting = string2array($this->fields[$field]['setting']);

  3. $columns = explode("\n",$this->fields[$field]['column']);

  4.  
  5. $array = array();

  6. if(!empty($_POST[$field.'_1'])) {

  7. foreach($_POST[$field.'_1'] as $key=>$val) {

  8. for ($x=1; $x<=count($columns); $x++) {

  9. $array[$key][$field.'_'.$x] = $_POST[$field.'_'.$x][$key];

  10. }

  11. }

  12. }

  13. $array = array2string($array);

  14. return $array;

  15. }

八、在tabletext目录下,新建PHP文件output.inc.php,代码如下:

 
  1. function tabletext($field, $value) {

  2. return string2array($value);

  3. }

九、修改statics\js\content_addtop.js文件,添加上移、下移排序、删除本行功能函数,代码如下:

 
  1. /*文本组字段添加上移、下移排序、删除本行功能 WY ADD AT 2018-11-29*/

  2. function moveUp(obj){

  3. var current=$(obj).parent().parent();

  4. var prev=current.prev();

  5. if(prev)

  6. {

  7. current.insertBefore(prev);

  8. }

  9. }

  10. function moveDown(obj){

  11. var current=$(obj).parent().parent();

  12. var next=current.next();

  13. if(next)

  14. {

  15. current.insertAfter(next);

  16. }

  17. }

  18. function delThisAttr(self){

  19. if (!confirm("确认要删除么?")) {

  20. return false;

  21. }

  22. $(self).parent().parent().remove();

  23. }

十、前台内容页模板,代码如下:

 
  1. <?php

  2. //表头信息从模型缓存中调取,当然你也可以写成固定的

  3. $modelsinfo = getcache('model_field_'.$modelid, 'model');

  4. $params_colname = explode("\n",$modelsinfo['params']['column']);

  5. $proinfo_colname = explode("\n",$modelsinfo['proinfo']['column']);

  6. ?>

  7.  
  8. {if !empty($params)}

  9. <table border="1">

  10. <tr>

  11. {loop $params_colname $cols}

  12. <th>{$cols}</th>

  13. {/loop}

  14. </tr>

  15. {loop $params $pv}

  16. <tr>

  17. {loop $pv $v}

  18. <td>{$v}</td>

  19. {/loop}

  20. </tr>

  21. {/loop}

  22. </table>

  23. {/if}

  24.  
  25. <br>

  26.  
  27. {if !empty($proinfo)}

  28. <table border="1">

  29. <tr>

  30. {loop $proinfo_colname $cols}

  31. <th>{$cols}</th>

  32. {/loop}

  33. </tr>

  34. {loop $proinfo $pv}

  35. <tr>

  36. {loop $pv $v}

  37. <td>{$v}</td>

  38. {/loop}

  39. </tr>

  40. {/loop}

  41. </table>

  42. {/if}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值