卡卡站长

时间:2022-12-02   编辑:卡卡建站

yzmcms自定义字段时,如果自定义一个单选框字段,备选选项,将以标题存储在数据库中。

例如:如果做个模板站,新建个字段叫 模板颜色{mbcolor},对应的单选框有:红色、绿色、蓝色等10种颜色,那么在每篇文章中,mbcolor字段内容将是红色,或蓝色,这种varchar型的文本。

当数据量过大时,前端利用这些信息筛选时,效率就会明显下降。

那么,如何优化查询效率,其实很简单,让mbcolor使用数字来存储颜色。即红色就存1,绿色就存成2..

然后将mbcolor字段的字段类型修改成数值/布尔/选择类型,根据具体的可以变动,并设置成索引。

那么,一串数字,前台调用和后台录入,不可能记录每个颜色对应的数值,怎么办如何录入?

接下来简单改造即可。

让系统单选框中选择红色,自动向数据库存储为数字1,等等,操作方法如下:

1、打开文件 /yzmphp/core/class/form.class.php,将单选框的函数修改成如下:

/**

* 单选框

* @param $name name

* @param $val 默认选中值 如:1

* @param $array 一维数组 如:array('交易成功', '交易失败', '交易结果未知');

*/

public static function radio($name, $val = '', $array = array()) {

$string = '';

foreach($array as $value) {

$tmpstr=explode('::',$value,2);

$value=$tmpstr[0];

$vname=empty($tmpstr[1])?$value:$tmpstr[1];

$checked = trim($val)==trim($value) ? 'checked' : '';

$string .= '<label class="option_label option_radio" >';

$string .= '<input type="radio" class="yzm-radio" name="'.$name.'" id="'.$name.'_'.$value.'" '.$checked.' value="'.$value.'">'.$vname;

$string .= '</label>';

}

return $string;

}


将复选框函数修改成:

/**

* 复选框

* @param $name name

* @param $val 默认选中值,多个用 '逗号'分割 如:'1,2'

* @param $array 一维数组 如:array('交易成功', '交易失败', '交易结果未知');

*/

public static function checkbox($name, $val = '', $array = array()) {

$string = '';

$val = trim($val);

if($val != '') $val = strpos($val, ',') ? explode(',', $val) : array($val);

$i = 1;

foreach($array as $value) {

$value = trim($value);

$tmpstr=explode('::',$value,2);

$value=$tmpstr[0];

$vname=empty($tmpstr[1])?$value:$tmpstr[1];

$checked = ($val && in_array($value, $val)) ? 'checked' : '';

$string .= '<label class="option_label option_box" >';

$string .= '<input type="checkbox" class="yzm-checkbox" name="'.$name.'[]" id="'.$name.'_'.$i.'" '.$checked.' value="'.$value.'">'.$vname;

$string .= '</label>';

$i++;

}

return $string;

}


即可在单选框与复选框中定义2个参数,即录入标题,和录入数值

2、自定义字段为单选框和复选框时,默认的选项列表格式为:用“|”分开,如“男|女|人妖”

修改后则为:用“|”分开,如“1::男|2::女|3::人妖”,即表示,后台录入时选择男,录入到数据库值为1。

当然修改后,兼容老格式,你仍然可以使用男|女|人妖这种格式,只不过仍然用汉字存储到数据库。同时,试试下拉框,如何修改?

3、根据上文说的,修改对应字段的类型,比如改成布尔型

后台录入搞定,那么前台调用如何调用成汉字?

4、if else 或者 case switch总会用吧。再或者定义个数组,如 mbcolor[1]='红色';

即可完美提升效率。