|
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 world"}{$x}');</pre> |
|
18 * |
|
19 * @package Resource-examples |
|
20 * @author Rodney Rehm |
|
21 */ |
|
22 class Smarty_Resource_Mysqls extends Smarty_Resource_Custom { |
|
23 // PDO instance |
|
24 protected $db; |
|
25 // prepared fetch() statement |
|
26 protected $fetch; |
|
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 } |
|
36 |
|
37 /** |
|
38 * Fetch a template and its modification time from database |
|
39 * |
|
40 * @param string $name template name |
|
41 * @param string $source template source |
|
42 * @param integer $mtime template modification timestamp (epoch) |
|
43 * |
|
44 * @return void |
|
45 */ |
|
46 protected function fetch($name, &$source, &$mtime) { |
|
47 $this->fetch->execute(array('name' => $name)); |
|
48 $row = $this->fetch->fetch(); |
|
49 $this->fetch->closeCursor(); |
|
50 if ($row) { |
|
51 $source = $row['source']; |
|
52 $mtime = strtotime($row['modified']); |
|
53 } else { |
|
54 $source = null; |
|
55 $mtime = null; |
|
56 } |
|
57 } |
|
58 } |