[精讚] [會員登入]
1974

[PHP] codeignitor4+ smarty4

“
這篇整合 php 的framework codeignitor4 + smarty4。
„

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

分享連結 [PHP] codeignitor4+ smarty4@新精讚
(文章歡迎轉載,務必尊重版權註明連結來源)
2022-12-27 21:23:52 最後編修
2022-12-27 15:23:18 By 張○○
 

 

因為升級成 Codeignitor4(以下全稱為ci4) 加上習慣使用 smarty4,因此在 view表上決定使用 smarty4(以下皆稱smarty)。

程式碼來源於[1],有小部分修改。

異動的檔案有三個,在app/目錄下

├── Config
│   ├── Services.php  <== 註記服務
├── Libraries
│   └── CI4Smarty.php  <== 叫用smarty物件
├── ThirdParty
    └── smarty <== smarty4裝在這裡
        ...
        └── libs
            ├── Autoloader.php  <== 讀取此檔即可

在writable/目錄下建立兩個可寫入的目錄

└── writable
    ├── cache
    ├── templates_c

 

Config/Services.php

<?php

namespace Config;

use CodeIgniter\Config\Services as CoreServices;
use CodeIgniter\Config\BaseConfig;
use Config\App;
use App\Libraries\CI4Smarty;

require_once SYSTEMPATH . 'Config/Services.php';

class Services extends CoreServices
{
    public static function SmartyEngine($getShared = true){
        return ($getShared === true ? static::getSharedInstance('SmartyEngine') : new CI4Smarty());
    }
};

 

Libraries/CI4Smarty.php

<?php

namespace App\Libraries;

require_once APPPATH.'ThirdParty/smarty/libs/Autoloader.php';

use \Smarty_Autoloader;

Smarty_Autoloader::register();

use \Smarty;

class CI4Smarty extends Smarty {

    public function __construct()
    {
        parent::__construct();
        parent::setTemplateDir(APPPATH . 'Views/');
        parent::setCompileDir(WRITEPATH . 'templates_c/')->setCacheDir(WRITEPATH . 'cache/');
        parent::setLeftDelimiter('{{');
        parent::setRightDelimiter('}}');
    }

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

設定寫入暫存檔目錄及cache,同時設定smart標記左右符號。

 

Controller 中叫用

service('SmartyEngine')->assign('ip',$ip)->assign('isipv6',  $isipv6);
service('SmartyEngine')->view('smarty_template.tpl');

SmartyEngine 預設採用靜態方式載入,如果想要創建新的 SmartyEngine,可寫成:

service('SmartyEngine',false);

結論是透過網友的幫忙,smarty+ci4 整合的不錯,也不難,祝大家使用愉快。

 

參考資料

[1] https://forum.codeigniter.com/thread-76323.html

END

你可能感興趣的文章

[PHP] 類別的繼承及建構子和解構子 PHP 類別的繼承及建構子和解構子

[Smarty5] 如何在樣版中使用php本身的函式 解決 smarty5版後不能直接叫用 php函式的問題

[PHP] CodeIgniter 3+pure+smarty安裝及環境設置2/2 PHP framework CodeIgniter 3+ pure CSS +smarty Template Engine的整合#2

[PHP] 將字串的部分加上遮罩的函式 有些資料會想要隱藏部分的字元,例如身分證號或信用卡號、電話等。我寫了一個函式來完成這個功能。

Smarty安裝 smarty 是著名的樣版引擎,非常的好用,用多了突然發現拿掉smarty反而不會寫php了,以下是安裝過程..

[CI3] 使用和修改日曆類別 calendar library CI3有一個日曆圖書館 library,可以快速的建立一個日曆,但是想修改讓他更棒

隨機好文

[MAC] 截取螢幕畫面的方法 截取螢幕畫面的方法,在MAC中叫作螢幕快照,英文是screenshot

談借錢 人借錢時手心向上頭向下,人還錢時手心向下頭向上

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

好用的3+2碼郵遞區號查詢系統推薦 網路上找到用地址輸入判斷3+2碼郵遞區號的辨識率不高,除了這個網站…

[PHP] 檢查IP是否在某個網段內 mtachcidr 要檢查IP是否在某個網段內,要寫幾行?10行?5行? 不用,只要2行。以下是我寫的 code /** * matchCI