library/smarty/demo/plugins/resource.mysql.php
changeset 46 f11c31f7fa3e
parent 45 a56e7f9a0463
child 47 03388ec805b4
equal deleted inserted replaced
45:a56e7f9a0463 46:f11c31f7fa3e
     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 }