PHPCMS V9 新增通用性強,不限列數、不限文本組個數的高級文本組(信息表格)字段類型

爲什麼說是在PHPCMS V9上新增了通用性強,不限列數、不限文本組個數的多文本字段類型?

由於網上目前搜到的PHPCMS V9 多文本字段,字段名稱在設計字段的時候已經定義了,這樣侷限性就比較大。原因如下:

其一:一篇文章中想添加一個有兩列的多文本字段,就需要再去重新設計;

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

其三:一篇 文章中需要多個文本組,會有各種衝突。

下面來看看新增的通用性強,不限列數、不限文本組個數的多文本字段(我這裏給它命名爲“信息表格”)前後臺的效果:

字段添加:

字段修改(相關參數中表格列名必填,列名爲表格每列的名稱,一行代表一個列名)

文章內容添加:

文章內容編輯:

前臺文章顯示:

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

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

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

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

<?php
defined('IN_ADMIN') or exit('No permission resources.');

$field_type				= 'mediumtext'; //字段數據庫類型	
$field_basic_table		= 0; //是否允許作爲主表字段
$field_allow_index		= 0; //是否允許建立索引
$field_minlength		= 0; //字符長度默認最小值
$field_maxlength		= ''; //字符長度默認最大值
$field_allow_search		= 0; //作爲搜索條件
$field_allow_fulltext	= 0; //作爲全站搜索信息
$field_allow_isunique	= 0; //是否允許值唯一
?>

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

<table cellpadding="2" cellspacing="1" width="98%">
	<tr>
    <td width="100">表格列名</td>
    <td><textarea name="setting[column]" cols="20" id="column" style="height:100px;width:200px;"><?php echo $setting['column'];?></textarea>表格每列的名稱,一行代表一個列名</td>
  </tr>
</table>

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

<?php defined('IN_PHPCMS') or exit('No permission resources.');?>
<table cellpadding="2" cellspacing="1" width="98%">
	<tr>
    <td width="100">表格列名</td>
    <td><textarea name="setting[column]" cols="20" id="column" style="height:100px;width:200px;"><?php echo $setting['column'];?></textarea>表格每列的名稱,一行代表一個列名</td>
  </tr>
</table>

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

function tabletext($field, $value, $fieldinfo) {
extract(string2array($fieldinfo['setting']));
$columns = explode("\n",$this->fields[$field]['column']);
$list_str = '';
if($value) {
$value = string2array(html_entity_decode($value,ENT_QUOTES));
if(is_array($value)) {
foreach($value as $_k=>$_v) {
    $list_str .= "<tr>";
    for ($x=1; $x<=count($columns); $x++) {
        $list_str .="<td><input type='text' name='".$field."_".$x."[]' value='".$_v[$field."_".$x]."' class='input-text' style='width:100%; padding:0; height:22px;'></td>";
    }
    $list_str .= "<td><input type='button' class='button' value='刪除' οnclick='delThisAttr(this)'> <input type='button' class='button' value='↑上移' οnclick='moveUp(this)'> <input type='button' class='button' value='↓下移' οnclick='moveDown(this)'></td></tr>";
}
}
}

$string ='<script type=text/javascript>
function add'.$field.'(id){
    var html = "<tr>';
for($cols=1; $cols<=count($columns); $cols++){
    $string .='<td><input type=\'text\' name=\''.$field.'_'.$cols.'[]\' value=\'\' class=\'input-text\' style=\'width:100%; padding:0; height:22px;\'></td>';
}
$string .='<td><input type=\'button\' class=\'button\' value=\'刪除\' οnclick=\'delThisAttr(this)\'> <input type=\'button\' class=\'button\' value=\'↑上移\' οnclick=\'moveUp(this)\'> <input type=\'button\' class=\'button\' value=\'↓下移\' οnclick=\'moveDown(this)\'></td></tr>";
$("#"+id).before(html);
}
</script>';
$string .= '<input name="info['.$field.']" type="hidden" value="1">
<fieldset class="blue pad-10">
<legend>列表</legend><div class="table-list"><table width="100%" cellspacing="0"><thead><tr align="left"> ';

foreach($columns as $column){
    $string .="<th align='left' style='text-align:left; padding:0 0 0 12px; border-bottom: 1px solid #d5dfe8;'>".$column."</th>";
}
$string .="<th align='left' style='text-align:left; padding:0 0 0 12px; border-bottom: 1px solid #d5dfe8; width:150px;'>操作</th></tr></thead><tbody>";

$string .= $list_str;

$string .= "<tr id='".$field."'></tr></tbody>
        </table></div>
</fieldset>
<div class='bk10'></div>";
$string .= "<input type=\"button\" class=\"button\" value=\"添加一行\" οnclick=\"add".$field."('".$field."')\">";
return $string;
}

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

function tabletext($field, $value) {
    $setting = string2array($this->fields[$field]['setting']);
    $columns = explode("\n",$this->fields[$field]['column']);

    $array = array();
    if(!empty($_POST[$field.'_1'])) {
        foreach($_POST[$field.'_1'] as $key=>$val) {
            for ($x=1; $x<=count($columns); $x++) {
                $array[$key][$field.'_'.$x] = $_POST[$field.'_'.$x][$key];
            }
        }
    }
    $array = array2string($array);
    return $array;
}

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

function tabletext($field, $value) {
    return string2array($value);
}

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

/*文本組字段添加上移、下移排序、刪除本行功能 WY ADD AT 2018-11-29*/
function moveUp(obj){
	var current=$(obj).parent().parent();
	var prev=current.prev();
	if(prev)
	{
	current.insertBefore(prev);
	}
}
function moveDown(obj){
	var current=$(obj).parent().parent();
	var next=current.next();
	if(next)
	{
	current.insertAfter(next);
	}
}
function delThisAttr(self){
  if (!confirm("確認要刪除麼?")) {
    return false;
  }
  $(self).parent().parent().remove();
}

十、前臺內容頁模板,代碼如下:

<?php
//表頭信息從模型緩存中調取,當然你也可以寫成固定的
$modelsinfo = getcache('model_field_'.$modelid, 'model');
$params_colname = explode("\n",$modelsinfo['params']['column']);
$proinfo_colname = explode("\n",$modelsinfo['proinfo']['column']);
?>

{if !empty($params)}
<table border="1">
    <tr>
        {loop $params_colname $cols}
        <th>{$cols}</th>
        {/loop}
    </tr>
    {loop $params $pv}
    <tr>
        {loop $pv $v}
        <td>{$v}</td>
        {/loop}
    </tr>
    {/loop}
</table>
{/if}

<br>

{if !empty($proinfo)}
<table border="1">
    <tr>
        {loop $proinfo_colname $cols}
        <th>{$cols}</th>
        {/loop}
    </tr>
    {loop $proinfo $pv}
    <tr>
        {loop $pv $v}
        <td>{$v}</td>
        {/loop}
    </tr>
    {/loop}
</table>
{/if}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章