Daily Archives: 03.07.2011
Как настроить Smarty для удобной работы (+наследование)
Smarty — странноватый и глючноватый шаблонизатор, если сравнивать с Django. Но под php ничего под руку не попалось, чтобы работало из коробки, было просто в настройке, и, к тому же, когда-то давно я его уже ковырял. В общем, нужно было срочно прикрутить шаблонизатор — сделал следующее. В классе, ответственном за вывод:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
private static function getSmarty( array $Params ) { require_once( SMARTY . 'Smarty.class.php' ); $smarty = new Smarty(); $smarty->error_reporting = E_ALL & ~E_NOTICE; $smarty->force_compile = true; $smarty->left_delimiter = '{{'; $smarty->right_delimiter = '}}'; $smarty->template_dir = TEMPLATE; foreach ( $Params as $key => $value ) { $smarty->assign( $key, $value ); } return $smarty; } public function renderToView( rController $Controller, $Debug = false ) { $contentType = $Controller->getContentType(); self::setHeaders( $contentType ); switch ( $contentType ) { case self::CONTENT_TYPE_JSON : echo json_encode( $Controller->getTemplateData() ); break; case self::CONTENT_TYPE_HTML : default : $templatePath = $Controller->getTemplatePath(); if ( ! $templatePath ) { $templatePath = $this->generateTemplatePath( $Controller ); } if ( ! file_exists( TEMPLATE . $templatePath ) ) { if ( $Debug ) { echo 'tried ' . TEMPLATE . $templatePath; } $templatePath = $this->defaultTemplatePath; } self::getSmarty( $Controller->getTemplateData() )->display( $templatePath ); } } |
Во вьюхе:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// layout.tpl <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <head> <title>{{if isset( $title )}}{{$title}}{{else}}{{$defaultTitle}}{{/if}}</title> <script type="text/javascript" src="/js/main.js"></script> {{block name="head"}}{{/block}} </head> <body> {{block name="content"}}{{/block}} </body> // index.tpl {{extends 'layout.tpl'}} {{block name="content"}} {{assign 'myparamm' 'Bob'}} myparamm {{$myparamm}} {{/block}} |
…