Smarty自定義模板資源

2018-12-09 11:55 更新

自定義模板資源

你可以通過(guò)任何可訪問(wèn)的來(lái)源來(lái)提供模板,如數(shù)據(jù)庫(kù),網(wǎng)絡(luò)sockets,文件等, 編寫(xiě)這些來(lái)源的資源插件并將他們注冊(cè)到Smarty。

參見(jiàn)資源插件。

溫馨提示

注意你不能覆蓋內(nèi)置的file:資源, 但你可以設(shè)計(jì)一個(gè)基于文件系統(tǒng)的資源并為其注冊(cè)另一個(gè)資源名稱。

Example 16.10. U使用自定義資源

<?php

/**
* MySQL 資源
*
* 過(guò)自定義API,實(shí)現(xiàn)用MySQL來(lái)存取模板和配置資源。
*
* 表定義:
* <pre>CREATE TABLE IF NOT EXISTS `templates` (
*   `name` varchar(100) NOT NULL,
*   `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
*   `source` text,
*   PRIMARY KEY (`name`)
* ) ENGINE=InnoDB DEFAULT CHARSET=utf8;</pre>
*
* 演示數(shù)據(jù):
* <pre>INSERT INTO `templates` (`name`, `modified`, `source`) VALUES ('test.tpl', "2010-12-25 22:00:00", '{$x="hello world"}{$x}');</pre>
*
* @package Resource-examples
* @author Rodney Rehm
*/
class Smarty_Resource_Mysql extends Smarty_Resource_Custom {
 // PDO 實(shí)例
 protected $db;
 // prepared fetch() statement
 protected $fetch;
 // prepared fetchTimestamp() statement
 protected $mtime;

 public function __construct() {
     try {
         $this->db = new PDO("mysql:dbname=test;host=127.0.0.1", "smarty", "smarty");
     } catch (PDOException $e) {
         throw new SmartyException('Mysql Resource failed: ' . $e->getMessage());
     }
     $this->fetch = $this->db->prepare('SELECT modified, source FROM templates WHERE name = :name');
     $this->mtime = $this->db->prepare('SELECT modified FROM templates WHERE name = :name');
 }
 
 /**
  * 從數(shù)據(jù)庫(kù)中獲取一個(gè)模板內(nèi)容及修改時(shí)間。
  *
  * @param string $name 模板名稱
  * @param string $source 引用的模板資源
  * @param integer $mtime 引用的模板修改時(shí)間戳
  * @return void
  */
 protected function fetch($name, &$source, &$mtime)
 {
     $this->fetch->execute(array('name' => $name));
     $row = $this->fetch->fetch();
     $this->fetch->closeCursor();
     if ($row) {
         $source = $row['source'];
         $mtime = strtotime($row['modified']);
     } else {
         $source = null;
         $mtime = null;
     }
 }
 
 /**
  * 獲取一個(gè)模板的修改時(shí)間
  *
  * @note 本方法是可選的。僅在修改時(shí)間的獲取比加載完整的模板資源更快的情況下使用。
  * @param string $name 模板名稱
  * @return integer 模板被修改的時(shí)間戳
  */
 protected function fetchTimestamp($name) {
     $this->mtime->execute(array('name' => $name));
     $mtime = $this->mtime->fetchColumn();
     $this->mtime->closeCursor();
     return strtotime($mtime);
 }
}

require_once 'libs/Smarty.class.php';
$smarty = new Smarty();
$smarty->registerResource('mysql', new Smarty_Resource_Mysql());

// 在PHP中使用資源
$smarty->display("mysql:index.tpl");
?>

在模板中:

{include file='mysql:extras/navigation.tpl'}

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)