|
1 <?php |
|
2 |
|
3 /** |
|
4 * MySQL Resource |
|
5 * Resource Implementation based on the Custom API to use |
|
6 * MySQL as the storage resource for Smarty's templates and configs. |
|
7 * Table definition: |
|
8 * <pre>CREATE TABLE IF NOT EXISTS `templates` ( |
|
9 * `name` varchar(100) NOT NULL, |
|
10 * `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, |
|
11 * `source` text, |
|
12 * PRIMARY KEY (`name`) |
|
13 * ) ENGINE=InnoDB DEFAULT CHARSET=utf8;</pre> |
|
14 * Demo data: |
|
15 * <pre>INSERT INTO `templates` (`name`, `modified`, `source`) VALUES ('test.tpl', "2010-12-25 22:00:00", '{$x="hello world"}{$x}');</pre> |
|
16 * |
|
17 * @package Resource-examples |
|
18 * @author Rodney Rehm |
|
19 */ |
|
20 class Smarty_Resource_Mysql extends Smarty_Resource_Custom { |
|
21 // PDO instance |
|
22 protected $db; |
|
23 // prepared fetch() statement |
|
24 protected $fetch; |
|
25 // prepared fetchTimestamp() statement |
|
26 protected $mtime; |
|
27 |
|
28 public function __construct() { |
|
29 try { |
|
30 $this->db = new PDO("mysql:dbname=test;host=127.0.0.1", "smarty"); |
|
31 } catch (PDOException $e) { |
|
32 throw new SmartyException('Mysql Resource failed: ' . $e->getMessage()); |
|
33 } |
|
34 $this->fetch = $this->db->prepare('SELECT modified, source FROM templates WHERE name = :name'); |
|
35 $this->mtime = $this->db->prepare('SELECT modified FROM templates WHERE name = :name'); |
|
36 } |
|
37 |
|
38 /** |
|
39 * Fetch a template and its modification time from database |
|
40 * |
|
41 * @param string $name template name |
|
42 * @param string $source template source |
|
43 * @param integer $mtime template modification timestamp (epoch) |
|
44 * |
|
45 * @return void |
|
46 */ |
|
47 protected function fetch($name, &$source, &$mtime) { |
|
48 $this->fetch->execute(array('name' => $name)); |
|
49 $row = $this->fetch->fetch(); |
|
50 $this->fetch->closeCursor(); |
|
51 if ($row) { |
|
52 $source = $row['source']; |
|
53 $mtime = strtotime($row['modified']); |
|
54 } else { |
|
55 $source = null; |
|
56 $mtime = null; |
|
57 } |
|
58 } |
|
59 |
|
60 /** |
|
61 * Fetch a template's modification time from database |
|
62 * |
|
63 * @note implementing this method is optional. Only implement it if modification times can be accessed faster than loading the comple template source. |
|
64 * |
|
65 * @param string $name template name |
|
66 * |
|
67 * @return integer timestamp (epoch) the template was modified |
|
68 */ |
|
69 protected function fetchTimestamp($name) { |
|
70 $this->mtime->execute(array('name' => $name)); |
|
71 $mtime = $this->mtime->fetchColumn(); |
|
72 $this->mtime->closeCursor(); |
|
73 |
|
74 return strtotime($mtime); |
|
75 } |
|
76 } |