不知道各位有沒有在使用phpcms過程中發(fā)現(xiàn),建模型字段時單選復選的值只能手寫,不能從其他表獲取這個問題;在這個方面,五指CMS更勝一籌,在字段的時候有“自定義SQL”這一選項。只要略加修改,也可以實現(xiàn)同樣的功能。
解決方案:
方案一:
(1)在phpcms/modules/content/sitemodel_field.php文件下,add方法和edit方法中增加(注意看一下代碼,要增加在給$setting重復賦值之前)
$field_type = $_POST['info']['formtype'];
$setting = $_POST['setting'] ? $_POST['setting'] : '';
if ($field_type == 'box' && !empty($setting)) {
// 如果是選項
// 判斷選項值是否是SQL語句
if(strpos($setting['options'],'|') == false){
$options = $this->db->query($setting['options']);
$option_arr = $this->db->fetch_array();
$option_str = "";
foreach ($option_arr as $key => $value) {
$option_str .= $value['title'].'|'.$value['id']."\r\n";
}
$_POST['setting']['options'] = rtrim($option_str);
$_POST['setting']['sql'] = $setting['options'];
}
}(2)在phpcms/modules/content/fields/box/field_edit_form.inc.php文件下修改文本框顯示值,并在新增和編輯頁面增加提醒語句
<tr>
<td width="100">選項列表</td>
<td><textarea name="setting[options]" rows="2" cols="20" id="options" style="height:100px;width:200px;"><?php if(!empty($setting['sql'])) { echo $setting['sql']; } else { echo $setting['options']; } ?></textarea><br><span style="color: grey;">如果需要其他表數(shù)據(jù),直接填寫SQL語句,格式按照"SELECT `filed1` as id,`field2` as title FROM table_name WHERE ..."</span></td>
</tr>效果展示:
(1)字段新增與編輯

(2)內(nèi)容管理

方案二:與方案一相同原理,不直接填寫SQL,將SQL整理成參數(shù)形式
(1)在 phpcms/modules/content/fields/box/field_edit_form.inc.php 文件下,增加是否是SQL語句的選項按鈕
<tr>
<td width="100">是否為SQL</td>
<td>
<input type="radio" name="setting[is_sql]" value="1" <?php if($setting['is_sql']) echo 'checked';?> /> 是
<input type="radio" name="setting[is_sql]" value="0" <?php if(!$setting['is_sql']) echo 'checked';?> /> 否
</td>
</tr>
<tr>
<td width="100">選項列表</td>
<td><textarea name="setting[options]" rows="2" cols="20" id="options" style="height:100px;width:400px;"><?php if(!empty($setting['sql'])) { echo $setting['sql']; } else { echo $setting['options']; } ?></textarea>
</td>
</tr>(2)在phpcms/modules/content/sitemodel_field.php文件下,add方法和edit方法中增加(注意看一下代碼,要增加在給$setting重復賦值之前)
$setting = $_POST['setting'] ? $_POST['setting'] : '';
if ($field_type == 'box' && !empty($setting)) {
// 如果是選項
// 判斷選項值是否是SQL語句
if($setting['is_sql'] == 1){
$options = explode("\n",$setting['options']);
$sql = "SELECT ".$options[1]." FROM ".$options[0];
if (!empty($options[2])) $sql .= " WHERE ".$options[2];//條件
if (!empty($options[3])) $sql .= " ORDER BY ".$options[3];//排序
if (!empty($options[4])) $sql .= " LIMIT ".$options[4];//條數(shù)限制
$option = $this->db->query($sql);
$option_array = $this->db->fetch_array();
$option_str = "";
foreach ($option_array as $key => $value) {
$option_str .= $value['title'].'|'.$value['id']."\r\n";
}
$_POST['setting']['options'] = rtrim($option_str);
$_POST['setting']['sql'] = $setting['options'];
}
}





