Smarty

Singleton pattern

http://www.smarty.net/forums/viewtopic.php?t=16604
In alcuni casi è utile usare il singleton pattern per accedere ad una istanza di Smarty da qualunque punto del codice:

require('Smarty.class.php');

class MySmarty extends Smarty {
  static $instance = null;

  public static function getInstance($newInstance = null) {
    if( !is_null($newInstance) )
      self::$instance = $newInstance;
    if ( is_null(self::$instance) )
      self::$instance = new MySmarty();
    return self::$instance;
  }

  public function __construct() {
    parent::__construct();
    // initialize smarty here
  }
}

e si può usare in questo modo:

// initialize smarty object
$smarty = MySmarty::getInstance();
// now obtain same object from anywhere
$smarty = MySmarty::getInstance();
// ** Inizializzazione manuale **
// create new smarty object
$smarty = new MySmarty();
// set the instance object
MySmarty::getInstance($smarty);
// now obtain same object from anywhere
$smarty = MySmarty::getInstance();

Ereditarietà dei template

http://www.smarty.net/forums/viewtopic.php?t=17953
L’ ereditarietà può essere sfruttata per gestire, ad esempio, l’ aggiunta di script o di css nell’ header:
Si parte da un template di base, sia skeleton.tpl:

<html>
<head>
  <title>{block name="title"}Default Page Title{/block}</title>
  {block name="head"}{/block}
</head>
<body>
{block name="body"}{/block}
</body>
</html>

Per scrivere una pagina personalizzata mypage.tpl si deve soltanto “estendere” lo scheletro:

{extends file="layout.tpl"}
{block name="title"}My Page Title{/block}
{block name="head"}
<script type="text/javascript" src="/js/mypage.js"></script>
{/block}
{block name=body}My HTML Page Body goes here{/block}

per avere in output:

<html>
<head>
  <title>My Page Title</title>
  <link href="/css/mypage.css" rel="stylesheet" type="text/css"/>
  <script src="/js/mypage.js"></script>
</head>
<body>
My HTML Page Body goes here
</body>
</html>

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...