对finecms模板的改造sql

简介: 对于finecms的模板中不能愉快地写sql语句,好麻烦,对于手册上写的语法,表示脑容量不够没看懂,索性直接改造一下,模板的引擎吧 protected function _listdata($param) { if(strpos($param,"|")) { $rule = '#\|.+?\|#i';

对于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| }

	<a href="{$t['url']}" title="{$t['title']}"><span>{date('y-m-d',$t['inputtime'])}</span>
{/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类写的太复杂,脑容量小的根本就看不懂啊)


相关文章
DataGrip之一个赏心悦目的SQL格式化模板,快用起来吧
DataGrip之一个赏心悦目的SQL格式化模板,快用起来吧
DataGrip之一个赏心悦目的SQL格式化模板,快用起来吧
|
1月前
|
存储 SQL
物料清单应用输入模板的SQL存储过程设计
物料清单应用输入模板的SQL存储过程设计
|
4月前
|
Oracle Java 关系型数据库
Generator【SpringBoot集成】代码生成+knife4j接口文档(2种模板设置、逻辑删除、字段填充 含代码粘贴可用)保姆级教程(注意事项+建表SQL+代码生成类封装+测试类)
Generator【SpringBoot集成】代码生成+knife4j接口文档(2种模板设置、逻辑删除、字段填充 含代码粘贴可用)保姆级教程(注意事项+建表SQL+代码生成类封装+测试类)
28 0
|
8月前
|
SQL 开发框架 Java
2021-08-04大连东软实训第十一天---ssm框架,改造之前的项目,sql语句的学习,sql注入
2021-08-04大连东软实训第十一天---ssm框架,改造之前的项目,sql语句的学习,sql注入
55 0
|
12月前
|
SQL
01 反引号“`”的使用-ES6模板字符串&SQL区分关键字
1 在SQL中反引号的作用-区分关键字 当属性名与SQL关键字冲突时使用反引号将属性名扩起来,用于区分关键字
94 0
|
SQL Java 数据库连接
mybatis generator修改默认生成的sql模板
相关连接:    mybatis-generator扩展教程系列 -- 自定义sql xml文件   git项目地址
1848 0

热门文章

最新文章