對finecms模板的改造sql

大東瓜123發表於2016-09-30

對於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類寫的太複雜,腦容量小的根本就看不懂啊)


相關文章