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: | * Note that this MySQL implementation fetches the source and timestamps in |
8: | * a single database query, instead of two separate like resource.mysql.php does. |
9: | * Table definition: |
10: | * <pre>CREATE TABLE IF NOT EXISTS `templates` ( |
11: | * `name` varchar(100) NOT NULL, |
12: | * `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, |
13: | * `source` text, |
14: | * PRIMARY KEY (`name`) |
15: | * ) ENGINE=InnoDB DEFAULT CHARSET=utf8;</pre> |
16: | * Demo data: |
17: | * <pre>INSERT INTO `templates` (`name`, `modified`, `source`) VALUES ('test.tpl', "2010-12-25 22:00:00", '{$x="hello |
18: | * world"}{$x}');</pre> |
19: | * |
20: | * |
21: | * @package Resource-examples |
22: | * @author Rodney Rehm |
23: | */ |
24: | class Smarty_Resource_Mysqls extends Smarty_Resource_Custom |
25: | { |
26: | /** |
27: | * PDO instance |
28: | * |
29: | * @var \PDO |
30: | */ |
31: | protected $db; |
32: | |
33: | /** |
34: | * prepared fetch() statement |
35: | * |
36: | * @var \PDOStatement |
37: | */ |
38: | protected $fetch; |
39: | |
40: | /** |
41: | * Smarty_Resource_Mysqls constructor. |
42: | * |
43: | * @throws \SmartyException |
44: | */ |
45: | public function __construct() |
46: | { |
47: | try { |
48: | $this->db = new PDO("mysql:dbname=test;host=127.0.0.1", "smarty"); |
49: | } catch (PDOException $e) { |
50: | throw new SmartyException('Mysql Resource failed: ' . $e->getMessage()); |
51: | } |
52: | $this->fetch = $this->db->prepare('SELECT modified, source FROM templates WHERE name = :name'); |
53: | } |
54: | |
55: | /** |
56: | * Fetch a template and its modification time from database |
57: | * |
58: | * @param string $name template name |
59: | * @param string $source template source |
60: | * @param integer $mtime template modification timestamp (epoch) |
61: | * |
62: | * @return void |
63: | */ |
64: | protected function fetch($name, &$source, &$mtime) |
65: | { |
66: | $this->fetch->execute(array('name' => $name)); |
67: | $row = $this->fetch->fetch(); |
68: | $this->fetch->closeCursor(); |
69: | if ($row) { |
70: | $source = $row[ 'source' ]; |
71: | $mtime = strtotime($row[ 'modified' ]); |
72: | } else { |
73: | $source = null; |
74: | $mtime = null; |
75: | } |
76: | } |
77: | } |
78: |