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: