爲什麼說是在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}