[精讚] [會員登入]
1835

[Smarty5] 如何在樣版中使用php本身的函式

解決 smarty5版後不能直接叫用 php函式的問題

分享此文連結 //n.sfs.tw/16438

分享連結 [Smarty5] 如何在樣版中使用php本身的函式@新精讚
(文章歡迎轉載,務必尊重版權註明連結來源)
2024-07-07 07:11:06 最後編修
2024-07-06 18:36:28 By 張○○
 

自動目錄

是這樣的,這次在 smart5 中要使用php原本的函式,像這樣:

One.tpl

  <h5>{{rand()}}</h5>

 

在 smarty4以前都沒有問題,但這次在 smarty5 的環境中卻出錯了:

Smarty\CompilerException

Syntax error in template "file:One.mtpl" on line 16 "<h5>{{rand()}}</h5>" unknown modifier 'rand'

沒錯,無法使用php的內建函數。

官網提出的解釋是因為資安弱點,所以爾後得使用modifier,不再提供樣版中直接使用php函式的功能。

後來找了一些資料[2],發現以前的函式 register_modifier() 也不能用(這是舊版用的),在 smarty5 中你可以使用registerPlugin()函式來註冊新的modifier就可以了。

$smarty->registerPlugin('modifier', 'rand', 'rand');

參數三個分別是 type、在樣版中的名稱、實際叫用的函式名稱(也可以使用你自己的函式)。

這樣就可以在樣版中使用php的函式了。

會在樣版中使用的函式就那幾個,所以也可以寫在初始化設定中,例如我寫成這樣:

parent::registerPlugin('modifier', 'lang', 'lang');

* lang() 是自定義的函數

上面的parent 是因為繼承smarty的物件,完整大概長這樣:

use Smarty;

class Smarty5 extends Smarty\Smarty {

    public function __construct()
    {
        parent::__construct();
        parent::setTemplateDir(APPPATH . 'Views/');
        parent::setConfigDir(APPPATH . 'Config/Smarty5/');
        parent::setCompileDir(WRITEPATH . 'templates_c/')->setCacheDir(WRITEPATH . 'cache/');
        parent::setLeftDelimiter('{{');
        parent::setRightDelimiter('}}');
        parent::registerPlugin('modifier', 'lang', 'lang');
    }

    public function view($tpl_name) {
        parent::display($tpl_name);
    }
}

這樣我就可以使用

$s= new Smarty5();

這樣的方法叫用 smarty了。

 

參考資料

[1] smarty5官網 https://smarty-php.github.io/smarty/stable/upgrading/#variable-scope-bubbling

[2] https://github.com/smarty-php/smarty/issues/813

END

你可能感興趣的文章

PHP cli 傳入參數 php cli (PHP命令列的傳入參數使用方法

[CodeIgniter3] 解決無法上傳特定檔案(.sb2)的問題 上傳時出現The filetype you are attempting to upload is not allowed,要怎麼解決?

[PHP] 檢查檔案是否是圖檔 使用getimagesize函數檢查檔案是否是圖檔

[PHP] UTF8中取出字串中特定的字數 要將字串,例如資料庫取出的TEXT,取出特定的字數

[phpmyadmin] 缺少 mcrypt 外掛,請檢查 PHP 設定 缺少 mcrypt 外掛,請檢查 PHP 設定,安裝php-mcrypt。

使用Yahoo OAuth2 1/2 使用Yahoo OAuth2來認證我的網站

隨機好文

使用Google尋找你的手機 這近發現google竟然可以用來找android的手機,而且不需要經過什麼設定或安裝軟體。

PHP for sphinx 函式庫安裝 PECL/sphinx PHP>= 5.2.2 已經能原生支援 sphinx,可是預設的沒有裝,我們得自己裝才能用

NETCRAFT發現你的網站及作業系統 NETCRAFT可以發現你的網站及作業系統

詭異的創業思維 創業的思維中,有多少銀彈,有多少技術,有多少人脈,有多少時間等等,每個都要考慮進去,以熱忱建立的關係脆弱的像蘇打餅乾一樣..

APACHE的記錄檔格式 LogFormat 語法 在APACHE中有定義一些記錄的語法模版 在 /etc/httpd/conf/httpd.conf 中: LogForm