本文共 2007 字,大约阅读时间需要 6 分钟。
对于finecms的模板中不能愉快地写sql语句,好麻烦,对于手册上写的语法,表示脑容量不够没看懂,索性直接改造一下,模板的引擎吧
protected function _listdata($param) { if(strpos($param,"|")) { $rule = '#\|.+?\|#i'; preg_match($rule,$param,$result); if(!$result) return array(); $sql=substr($result[0],1,-1); $dbcache=100; $db = Controller::model('content'); $data = $db->execute($sql, true, $dbcache); // var_dump(array( 'result' => $data, 'sql' => $sql, 'total' => isset($total) ? $total : count($data))); return array( 'result' => $data, 'sql' => $sql, 'total' => isset($total) ? $total : count($data)); }
//以下是原来的代码 $_param = explode(' ', $param); $param = array();这样的话,就可以愉快地写sql语句了
下面写了个demo,大家可以试下
{list sql=|select * from fn_position_data RIGHT JOIN fn_content_1 ON `fn_content_1`.`id`=`fn_position_data`.`contentid` where posid=6 order by fn_position_data.listorder asc| } {date('y-m-d',$t['inputtime'])}{/list}
但是有一个问题,如果看你的模板就可以直接看到sql语句了,另外了没有对sql语句进行过滤,所以要进一步处理一下,因为这个是临时应付一下,所以暂时先这样
对于模板容易被别人看到的问题,可行的解决办法是这样的,把模板文件的扩展名改为.php ,并在解析模板的时候,去掉php标记就可以了
所以做了以下几点改动
第一,把模板文件的扩展名改为php,并在文件的头部加入了这样一句话<?php exit();?>
第二,修改模板的解析文件,主要的改动
/** * 获取视图文件的路径 */ protected function get_view_file($file_name) { //return $this->view_dir . $file_name . ((substr($file_name, strrpos($file_name, '.')) == '.html') ? '' : '.html'); return $this->view_dir . $file_name . ((substr($file_name, strrpos($file_name, '.')) == '.php') ? '' : '.php'); }
/** * 加载视图文件 */ protected function load_view_file($view_file) { if (!is_file($view_file)) { App::display_error(lang('app-8') . ': ' . $view_file); } $view_content = file_get_contents($view_file); $view_content= substr($view_content, 15); return $this->handle_view_file($view_content); }
这样就完成了模板的改造问题,这样,别有用心的人浏览模板文件时就会出现空白页面,起到了保护模板的作用
在做这个改动的时候,查看源文件,发现是在dayrui/core/common.php中引入的文件解析类,
如果要兼容其他的模板可以做一个新的解析类来兼容其它模板文件(个人认为原view类写的太复杂,脑容量小的根本就看不懂啊)转载地址:http://khzdx.baihongyu.com/