W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
你可以通過(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'}
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: