Модель Вид Контроллер, или попросту MVC - наверно самый популярный паттерн разработки web-сайтов. Грубо говоря Модель - содержит, Вид - показывает, а Контроллер - все это дело координирует..
В этой статье я расскажу про Вид. А точнее самалепный шаблонизатор. Почему я вновь пишу велосипед? - просите Вы. Я отвечу: PHP сам по себе является шаблонизатором, и прикручивать что-то стороннее к его работе, вот это уже ненормально. Мы же всего-лишь слегка облегчим работу верстальщику.
Класс шаблонизатора tpl
<?php class tpl{ private $vars = array(); private $tpldir = 'tpl/'; private $content_type = ''; public function __get( $name ){ if( isset($this->vars[$name]) ) return $this->vars[$name]; } public function __set( $name,$value ){ $this->vars[$name] = $value; } private function safe( $file ){ if( file_exists($file) ){ return file_get_contents($file); }else{ console( 'Файл '.$file.' не найден ',__FILE__,__CLASS__,__LINE__ ); return ''; } } private function exec($file) { eval('?>'.$this->safe( ROOT.$this->tpldir.$file.'.tpl') ); } public function assign( $var, $val='' ) { if( is_scalar($var) ) $this->vars[$var] = $val; else $this->vars = array_merge($this->vars,$var); } public function parse( $file,$vars = array() ) { ob_start(); $this->show( $file,$vars ); return ob_get_clean(); } public function read( $file ){ return $this->safe( ROOT.$this->tpldir.$file.'.tpl' ); } public function show( $file,$vars = array() ) { $this->assign($vars); extract($this->vars); $this->exec( $file ); } function setContentType( $type ){ if( in_array(strtolower($type),array('page','json','html')) ) $this->content_type = strtolower($type); } function getContentType( ){ return $this->content_type; } } ?>
файлы шаблонов представляют собой те же php файлы, только имеют расширение tpl
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru"> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"/> <title><?php echo $this->title;?></title> <body> <?php echo $this->content;?> <div><?php echo $news;?></div> <div><?php echo $users;?></div> </body> </html>
пользоваться в своем скрипте очень просто
<?php $tpl = new tpl(); $tpl->assign('content','Привет Мир!!!'); $tpl->assign('title','Демо сайт');// простое прсваивание $tpl->assign(array('news'=>'Новости','users'=>'Список польователей')); $tpl->parse('index');
в шаблоне можно использовать, три метода доступа к переменным
<?=$this->news;?> <?=$news;?> <?=$this->vars['news'];?>
используйте тот, который Вам удобнее. Одним из бонусов данной системы шаблонизации - это возможность повторного использования внутри шаблона.
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru"> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"/> <title><?php echo $this->title;?></title> <body> <?php echo $this->content;?> <div> <?php echo $news; $this->show('news_block'); ?> </div> <div><?php echo $this->content;?></div> </body> </html>
Использование шаблонизатора на порядок повышает читабельность кода, код отчищен от лишних данных и смежных к выводу операций, типа расчета количества ячеек для вывода в таблицу. Все на своих местах. Каждый занят свои делом. Не говоря уже про то, что сайт с такой архитектурой гораздо проще поддерживать, уделив больше внимания на продвижение сайтов в Яндекс и других поисковых системах. Т.е. для в шаблоне SEO оптимизатор просто прописывает в нужных местах meta теги, а уже в системе где-то в настройках правит их значение. Ему нет необходимости ищучать код Вашего сайта, достаточно поверхностного знания HTML.
Может кто-то захочет улучшить скрипт, длбро пожалость на GitHub
Комментарии
Цитата:
RSS лента комментариев этой записи