phpcms添加自定义模型字段-文本组
[ 2017/02/19, Phpcms , 5138阅, 0评 ]

我们在做类似于酒店房型等类型的时候,需要用到文本组字段模型,但PHPCMS并未提供该模型。如下图所示效果:

文本组1.png

文本组2.jpg

1.打开phpcms\modules\content\fields目录,复制文件夹downfiles,并改名为textgroups。

2.打开phpcms\modules\content\fields\fields.inc.php文件,增加字段类型:

'textgroups'=>'文本组字段',

3.打开phpcms\modules\content\fields\textgroups目录(第一步复制的文件夹),修改以下文件:

a.form.inc.php

function textgroups($field, $value, $fieldinfo) {
	extract(string2array($fieldinfo['setting']));
	$list_str = '';
	if($value) {
		$value = string2array(html_entity_decode($value,ENT_QUOTES));
		if(is_array($value)) {
			foreach($value as $_k=>$_v) {
				$list_str .= "<div id='textsgroups{$_k}'> <input type='text' name='{$field}_fx[]' value='{$_v[fx]}' style='width:100px;' class='input-text'> <input type='text' name='{$field}_fj[]' value='{$_v[fj]}' style='width:100px;' class='input-text'> <input type='text' name='{$field}_cx[]' value='{$_v[cx]}' style='width:100px;' class='input-text'> <input type='text' name='{$field}_kd[]' value='{$_v[kd]}' style='width:100px;' class='input-text'> <input type='text' name='{$field}_vip[]' value='{$_v[vip]}' style='width:100px;' class='input-text'> <a href=\"javascript:remove_div('textsgroups{$_k}')\">".L('remove_out')."</a></div>";
			}
		}
}

$string ='<script type=text/javascript>
function add_textsfile(returnid) {
var ids = parseInt(Math.random() * 10000);
var str = "<li id=\'textsgroups"+ids+"\'> <input type=\'text\' name=\'"+returnid+"_fx[]\' value=\'\' style=\'width:100px;\' class=\'input-text\'> <input type=\'text\' name=\'"+returnid+"_fj[]\' value=\'\' style=\'width:100px;\' class=\'input-text\'> <input type=\'text\' name=\'"+returnid+"_cx[]\' value=\'\' style=\'width:100px;\' class=\'input-text\'> <input type=\'text\' name=\'"+returnid+"_kd[]\' value=\'\' style=\'width:100px;\' class=\'input-text\'> <input type=\'text\' name=\'"+returnid+"_vip[]\' value=\'\' style=\'width:100px;\' class=\'input-text\'> <a href=\"javascript:remove_div(\'textsgroups"+ids+"\')\">Remove</a> </li>";
$(\'#\'+returnid).append(str);
}</script>';
$string .= '<input name="info['.$field.']" type="hidden" value="1">
<fieldset class="blue pad-10">
<legend>'.L('mm_fxlist').'</legend><div id="tt">
<input type="text" value="'.L('mm_fx').'" readonly style="width:100px;border:0;" class="input-text">
<input type="text" value="'.L('mm_fj').'" readonly style="width:100px;border:0;" class="input-text">
<input type="text" value="'.L('mm_cx').'" readonly style="width:100px;border:0;" class="input-text">
<input type="text" value="'.L('mm_kd').'" readonly style="width:100px;border:0;" class="input-text">
<input type="text" value="'.L('mm_lyj').'" readonly style="width:100px;border:0;" class="input-text">
</div>';
$string .= $list_str;
$string .= '<ul id="'.$field.'" class="picList"></ul>
</fieldset>
<div class="bk10"></div>
';
$string .= $str."<input type=\"button\" class=\"button\" value=\"".L('mm_addfx')."\" onclick=\"add_textsfile('{$field}')\">";
return $string;
}

b.input.inc.php

function textgroups($field, $value) {
	$hotel = $_POST[$field.'_fx'];
	$hotel_fj = $_POST[$field.'_fj'];
	$hotel_cx = $_POST[$field.'_cx'];
	$hotel_kd = $_POST[$field.'_kd'];
	$hotel_vip = $_POST[$field.'_vip'];
	$array = $temp = array();
	if(!empty($hotel)) {
		foreach($hotel as $key=>$hote) {
			$temp['fx'] = $hote;
			$temp['fj'] = $hotel_fj[$key];
			$temp['cx'] = $hotel_cx[$key];
			$temp['kd'] = $hotel_kd[$key];
			$temp['vip'] = $hotel_vip[$key];
			$array[$key] = $temp;
		}
	}
	$array = array2string($array);
	return $array;
}

c.output.inc.php

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

4.前台调用

<table>
  <tr>
    <th>房型</th>
    <th>房价</th>
    <th>床型</th>
    <th>路游价</th>
  </tr>
  {loop $fxinfo $v}<!--$fxinfo为字段名称-->
  <tr>
    <td>{$v[fx]}</td>
    <td>¥{$v[fj]}元</td>
    <td>{$v[cx]}</td>
    <td><strong>¥{$v[vip]}</strong>元</td>
  </tr>
  {/loop}
</table>

5.注意

注意修改几个文件中的函数名称,这个很容易忽略。

注意文件内容中引号的闭合和JS代码。

转载自:http://www.lanrenmaku.com/PHPCMS/2013_0613_997.html

有朋自远方来...评论一下呗O(∩_∩)O