Files
BESCMS/dayrui/Fcms/Field/Property.php
T

313 lines
13 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php namespace Phpcmf\Field;
/**
* https://www.besyun.com
* BESCMS
* 本文件是框架系统文件,二次开发时不可以修改本文件,可以通过继承类方法来重写此文件
**/
class Property extends \Phpcmf\Library\A_Field {
/**
* 构造函数
*/
public function __construct(...$params) {
parent::__construct(...$params);
$this->close_xss = 1; // 关闭xss验证
$this->fieldtype = ['TEXT' => ''];
$this->defaulttype = 'TEXT';
}
/**
* 字段相关属性参数
*
* @param array $value 值
* @return string
*/
public function option($option) {
unset($option['width']);
if (!isset($option['name_value']) || !$option['name_value']) {
$option['name_value'] = dr_lang('名称');
}
if (!isset($option['value_value']) || !$option['value_value']) {
$option['value_value'] = dr_lang('值');
}
$str = '
<div class="form-group">
<label class="col-md-2 control-label">'.dr_lang('选项名称').'</label>
<div class="col-md-9">
<label><input type="text" class="form-control" size="20" value="'.$option['name_value'].'" name="data[setting][option][name_value]"></label>
<label><input type="text" class="form-control" size="20" value="'.$option['value_value'].'" name="data[setting][option][value_value]"></label>
</div>
</div>
<div class="form-group dr_option" id="dr_option_0">
<label class="col-md-2 control-label">'.dr_lang('字段说明').'</label>
<div class="col-md-9"><div class="form-control-static">'.dr_lang('选择框与复选框类型的选项值以,分隔').'</div><br>
<a href="javascript:;" class="btn btn-sm red" onclick="dr_add_option()"><i class="fa fa-plus"></i>&nbsp;'.dr_lang('增加属性选项').'</a>
</div>
</div>';
unset($option['name_value']);
unset($option['value_value']);
$i = 0;
if ($option['default_value']) {
foreach ($option['default_value'] as $i => $t) {
$str.= '<div class="form-group dr_option" id="dr_option_'.$i.'" >';
$str.= '<label class="col-md-2 control-label">'.dr_lang('属性名称').'</label>';
$str.= '<div class="col-md-9"><label><input type="text" name="data[setting][option][default_value]['.$i.'][name]" value="'.$t['name'].'" class="form-control" /></label>';
$str.= '<label>&nbsp;&nbsp;'.dr_lang('类型').'</label><label><select class="form-control" name="data[setting][option][default_value]['.$i.'][type]">';
$str.= '<option value="1" '.($t['type'] == 1 ? "selected" : "").'> - '.dr_lang('文本框').' - </option>';
$str.= '<option value="2" '.($t['type'] == 2 ? "selected" : "").'> - '.dr_lang('选择框').' - </option>';
$str.= '<option value="3" '.($t['type'] == 3 ? "selected" : "").'> - '.dr_lang('复选框').' - </option>';
$str.= '</select></label>';
$str.= '<label>&nbsp;&nbsp;'.dr_lang('默认值/选项值').'</label><label><input type="text" name="data[setting][option][default_value]['.$i.'][value]" value="'.$t['value'].'" class="form-control input-xlarge"></label> <label><a onclick="$(\'#dr_option_'.$i.'\').remove()" href="javascript:;">'.dr_lang('删除').'</a></label>';
$str.= '</div></div>';
}
}
$str.= '
<script type="text/javascript">
var id='.$i.';
function dr_add_option() {
id ++;
if ($("#dr_option_"+id).length>0) {
dr_tips(0, \''.dr_lang("序列生成重复,请重新添加").'\');
return;
}
var html = "";
html+= "<div class=\"form-group dr_option\" id=\"dr_option_"+id+"\" >";
html+= "<label class=\"col-md-2 control-label\">'.dr_lang('属性名称').' "+id+"</label>";
html+= "<div class=\"col-md-9\">";
html+= "<label><input type=\"text\" name=\"data[setting][option][default_value]["+id+"][name]\" value=\"\" class=\"form-control\" /></label>";
html+= "<label>&nbsp;&nbsp;'.dr_lang('类型').'</label><label><select class=\"form-control\" name=\"data[setting][option][default_value]["+id+"][type]\">";
html+= "<option value=\"1\"> - '.dr_lang('文本框').' - </option>";
html+= "<option value=\"2\"> - '.dr_lang('选择框').' - </option>";
html+= "<option value=\"3\"> - '.dr_lang('复选框').' - </option>";
html+= "</select></label>";
html+= "<label>&nbsp;&nbsp;'.dr_lang('默认值/选项值').'</label><label><input type=\"text\" name=\"data[setting][option][default_value]["+id+"][value]\" class=\"form-control input-xlarge\"></label>&nbsp;<label><a onclick=\"$(\'#dr_option_"+id+"\').remove()\" href=\"javascript:;\">'.dr_lang('删除').'</a></label>";
html+= "</div>";
html+= "</div>";
$("#dr_option_rows").append(html);
}
</script>
<div id="dr_option_rows"></div>
<div class="form-group">
<label class="col-md-2 control-label">'.dr_lang('行数模式').'</label>
<div class="col-md-9">
<div class="mt-radio-inline">
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[setting][option][is_hang]" value="1" '.($option['is_hang'] ? 'checked' : '').'> '.dr_lang('固定').' <span></span></label>
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[setting][option][is_hang]" value="0" '.(!$option['is_hang'] ? 'checked' : '').'> '.dr_lang('无限').' <span></span></label>
</div>
<span class="help-block">'.dr_lang('无限行数可以在录入数据时自由添加行数,固定行数就只能是录入上述的固定属性行数').'</span>
</div>
</div>
';
return ['
'.$str];
}
/**
* 字段输出
*/
public function output($value) {
return dr_string2array($value);
}
/**
* 字段入库值
*/
public function insert_value($field) {
$data = [];
$value = \Phpcmf\Service::L('Field')->post[$field['fieldname']];
if ($value) {
$i = 1;
foreach ($value as $t) {
$data[$i] = $t;
$i++;
}
}
\Phpcmf\Service::L('Field')->data[$field['ismain']][$field['fieldname']] = dr_array2string($data);
}
/**
* 字段表单输入
*
* @param string $cname 字段别名
* @param string $name 字段名称
* @param array $cfg 字段配置
* @param string $value 值
* @return string
*/
public function input($field, $value = '') {
// 字段禁止修改时就返回显示字符串
if ($this->_not_edit($field, $value)) {
return $this->show($field, $value);
}
// 字段存储名称
$name = $field['fieldname'];
// 字段显示名称
$text = ($field['setting']['validate']['required'] ? '<span class="required" aria-required="true"> * </span>' : '').dr_lang($field['name']);
// 字段默认值
$value = $value ? dr_string2array($value) : array();
$str = '';
$str.= ' <div class="scroller_'.$name.'_files">
<div class="scroller" data-inited="0" data-initialized="1" data-always-visible="1" data-rail-visible="1">
<table class="table fc-sku-table table-striped table-bordered table-hover">
<thead>
<tr>
<th width="200" style="border-left-width: 1px!important;">'.dr_lang($field['setting']['option']['name_value'] ? $field['setting']['option']['name_value'] : dr_lang('名称')).' </th>
<th>'.dr_lang($field['setting']['option']['value_value'] ? $field['setting']['option']['value_value'] : dr_lang('值')).' </th>';
if (!$field['setting']['option']['is_hang']) {
$str.='
<th width="70" style="text-align: center"> ';
$str.= ' <a href="javascript:;" class="btn blue btn-xs" onClick="dr_add_property_'.$name.'()"> <i class="fa fa-plus"></i></a>';
$str.='</th>';
}
$str.= '
</tr>
</thead>
<tbody id="property_'.$name.'-sort-items" class="scroller_body">';
$i = 0;
unset($field['setting']['width']);
// 固定属性选项
if (isset($field['setting']['option']['default_value']) && $field['setting']['option']['default_value']) {
$i = 1;
foreach ($field['setting']['option']['default_value'] as $t) {
if (!isset($t['name']) && $t['name']) {
continue;
}
$str.= '<tr id="dr_items_'.$name.'_'.$i.'" class="dr_items_readonly">';
$str.= '<td class="highlight"><input type="text" readonly class="form-control input-sm" value="'.$t['name'].'" name="data['.$name.']['.$i.'][name]"></td>';
$str.= '<td>';
switch ($t['type']) {
case 1:
$v = $value[$i]['value'] ? $value[$i]['value'] : $t['value'];
$str.= '<input type="text" class="form-control input-sm" value="'.htmlspecialchars((string)$v).'" name="data['.$name.']['.$i.'][value]" />';
break;
case 2:
$v = explode(',', $t['value']);
$str.= '<select class="form-control" name="data['.$name.']['.$i.'][value]">';
$str.= '<option value=""> -- </option>';
if ($v) {
foreach ($v as $c) {
$selected = isset($value[$i]['value']) && $value[$i]['value'] == $c ? 'selected' : '';
$str.= '<option value="'.$c.'" '.$selected.'> '.$c.' </option>';
}
}
$str.= '</select>';
break;
case 3:
$v = explode(',', $t['value']);
if ($v) {
foreach ($v as $c) {
$selected = isset($value[$i]['value']) && dr_in_array($c, $value[$i]['value']) ? 'checked' : '';
$str.= '<input type="checkbox" name="data['.$name.']['.$i.'][value][]" value="'.$c.'" ' . $selected . ' />'.$c.'';
}
}
}
$str.= '</td>';
if (!$field['setting']['option']['is_hang']) {
$str.= '<td>';
$str.= '</td>';
}
$str.= '</tr>';
unset($value[$i]);
$i++;
}
}
// 剩下自定义属性
if ($value && !$field['setting']['option']['is_hang']) {
foreach ($value as $t) {
$str.= '<tr id="dr_items_'.$name.'_'.$i.'" class="dr_items_sort">';
$str.= '<td><input type="text" class="form-control input-sm" value="'.htmlspecialchars((string)$t['name']).'" name="data['.$name.']['.$i.'][name]"></td>';
$str.= '<td>';
$str.= '<input type="text" class="form-control input-sm" value="'.htmlspecialchars((string)$t['value']).'" name="data['.$name.']['.$i.'][value]" />';
$str.= '</td>';
$str.= '<td style="text-align: center"><a class="btn btn-xs red" href="javascript:;" onclick="$(\'#dr_items_'.$name.'_'.$i.'\').remove()"> <i class="fa fa-trash"></i> </a>';
$str.= '</td>';
$str.= '</tr>';
$i++;
}
}
$str.= '
</tbody>
</table></div></div>';
if (!$field['setting']['option']['is_hang']) {
$js = \Phpcmf\Service::L('js_packer');
$str.= $js->pack('<script type="text/javascript">
$("#property_'.$name.'-sort-items").sortable({
items: ".dr_items_sort"
});
dr_slimScroll_init(".scroller_'.$name.'_files", 300);
var id='.($i).';
function dr_add_property_'.$name.'() {
if ($("#dr_items_'.$name.'_"+id).length>0) {
id++;
dr_tips(0, \''.dr_lang("序列生成重复,请重新添加").'\');
return;
}
var html = "<tr id=\"dr_items_'.$name.'_"+id+"\">";
html+= "<td><input type=\"text\" class=\"form-control input-sm\" value=\"\" name=\"data['.$name.']["+id+"][name]\"></td>";
html+= "<td><input type=\"text\" class=\"form-control input-sm\" value=\"\" name=\"data['.$name.']["+id+"][value]\"></td>";
html+= "<td style=\"text-align: center\"><a class=\"btn btn-xs red\" href=\"javascript:;\" onclick=\"$(\'#dr_items_'.$name.'_"+id+"\').remove()\"> <i class=\"fa fa-trash\"></i> </a></td></tr>";
$("#property_'.$name.'-sort-items").append(html);
dr_slimScroll_init(".scroller_'.$name.'_files", 300);
id++;
}
</script>', 0);
}
$str.= '<span class="help-block">'.$field['setting']['validate']['tips'].'</span>';
return $this->input_format($field['fieldname'], $text, $str);
}
/**
* 字段表单显示
*
* @param string $field 字段数组
* @param array $value 值
* @return string
*/
public function show($field, $value = null) {
$str = '
<table class="table table-striped table-bordered table-advance ">
<thead>
<tr>
<th width="200" style="border-left-width: 1px!important;">'.dr_lang($field['setting']['option']['name_value'] ? $field['setting']['option']['name_value'] : dr_lang('名称')).' </th>
<th>'.dr_lang($field['setting']['option']['value_value'] ? $field['setting']['option']['value_value'] : dr_lang('值')).' </th>
</tr>
</thead>
<tbody>';
$i = 0;
unset($field['setting']['width']);
// 默认属性选项
if ($value) {
$value = dr_string2array($value);
foreach ($value as $t) {
$str.= '<tr>';
$str.= '<td class="highlight">'.$t['name'].'</td>';
$str.= '<td>'.$t['value'].'</td>';
$str.= '</tr>';
$i++;
}
}
$str.= '
</tbody>
</table>';
return $this->input_format($field['fieldname'], $field['name'], $str);
}
}