Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Парсер HTML-шаблонов
Форумы портала PHP.SU » PHP » Пользовательские функции » Парсер HTML-шаблонов

Страниц (1): [1]
 

1. UserID - 19 Апреля, 2007 - 18:49:40 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. /**
  4.  * @name    HTML Parser Class
  5.  * @package MyCMS System
  6.  * @version 1.0
  7.  * @author  Nikitin Vadim <nikitin.vadim@gmail.com>
  8.  */
  9.  
  10. class parser {
  11.    
  12.     // Array for error messages
  13.     var $error = array();
  14.    
  15.     // Array for redefined messages
  16.     var $vars = array();
  17.    
  18.     // Pointer to parsing file
  19.     var $tpl_file;
  20.    
  21.     // Pointer to file output
  22.     var $template;
  23.    
  24.     // Error message inline style
  25.     var $line_1 = null;
  26.     var $line_2 = null;
  27.  
  28.     /**
  29.      * Parser class construct
  30.      *
  31.      * @return $error array
  32.      */
  33.     function parser()
  34.     {
  35.         // Define error messages
  36.         $this->error[0] = "MyCMS System :: Server needs to update!";
  37.         $this->error[1] = "MyCMS System :: HTML template not found!";
  38.        
  39.         // Check for existen function
  40.         if (!@function_exists("file_get_contents")) {
  41.                 $this->halt( $this->error[0] );
  42.                 return false;
  43.         }
  44.         return $this->error;
  45.     }
  46.    
  47.           /**
  48.            * Set defined variables
  49.            *
  50.            * @param string $key
  51.            * @param string $var
  52.            * @return $vars array
  53.            */
  54.         function set_tpl($key, $var)
  55.         {
  56.                 $this->vars[$key] = $var;
  57.                 return $this->vars;
  58.         }
  59.    
  60.         /**
  61.          * Choose template file. Generate an error if not exist.
  62.          *
  63.          * @return $template string
  64.          */
  65.         function get_tpl()
  66.         {
  67.                 if(empty($this->tpl_file) || !file_exists($this->tpl_file)) {
  68.                         $this->halt( $this->error[1] );
  69.                 } else {
  70.                         $this->template = file_get_contents($this->tpl_file);
  71.                 }
  72.                 return $this->template;
  73.         }
  74.    
  75.         /**
  76.          * Parse HTML template and print it to screen
  77.          *
  78.          * @return null
  79.          */
  80.         function tpl_parse()
  81.         {
  82.                 // Redefine markers in HTML template
  83.             foreach($this->vars as $find => $replace) {
  84.                 $this->template = str_replace($find, $replace, $this->template);
  85.         }
  86.        
  87.         // Print it to screen
  88.         echo $this->template;
  89.         }
  90.    
  91.         /**
  92.          * If an error were generated, display it
  93.          *
  94.          * @param string $msg
  95.          */
  96.     function halt($msg)
  97.     {
  98.         $init = "<b>MyCMS System Info</b> <br />rn";
  99.         $this->line_1 = "<div align="center" style="font-family:Courier;font-size:12px;"> rnt";
  100.         $this->line_2 = "rn</div>";
  101.        
  102.         // Display error message and stop script
  103.         die($this->line_1.$init.$msg.$this->line2);
  104.     }
  105. };
  106. ?>
  107.  


И обращение:
PHP:
скопировать код в буфер обмена
  1.  
  2.     $tpl = new parser();
  3.     $tpl->tpl_file = "_template.tpl";
  4.     $tpl->get_tpl();
  5.         $tpl->set_tpl("{HEADER_1}", "Hello");
  6.         $tpl->set_tpl("{HEADER_2}", "World");
  7.     $tpl->tpl_parse();
  8.  


Либо указатель на файл шаблона можно непосредственно передавать в $tpl->get_tpl(), переделать несложно.
P.S. rn, rnt - надеюсь все поняли почему там нет слэшей.... не забывайте про них.
2. -SCHATTEN- - 19 Апреля, 2007 - 19:05:24 - перейти к сообщению
Одна проблема, JavaScript обрабатывается броузером и кусок кода который должен быть написан нет. =(
3. UserID - 19 Апреля, 2007 - 19:09:14 - перейти к сообщению
-SCHATTEN-

Не совсем тебя понял. Как правило, я скрипты js выношу в отдельный файл, но и итак, если они у меня в самом шаблоне, то проблем с ним у меня ещё не было.
4. -SCHATTEN- - 19 Апреля, 2007 - 20:43:25 - перейти к сообщению
Нет я имею в виду на форуме, когда я зашел сюда то у меня выполз сценарий, тобиш предупреждение о том что я незарегин (точно непомню) вот я и подумал что это было у тебя в коде.
5. valenok - 19 Апреля, 2007 - 22:10:18 - перейти к сообщению
Мне классы не нравятся по одной причине, длинно выходит.
Весь код можно ужать в это:

PHP:
скопировать код в буфер обмена
  1.  <?
  2. function TemplateParse( $tpl , $patterns , $replacements ) {
  3.    $tpl = file_get_contents($tpl) OR return "Can't read file";
  4.    echo str_replace($patterns,$replacements,$tpl) OR return "Can't replace";
  5.    return True;
  6. }
  7.  
  8. $pat = Array ('{HEADER}','{FOOTER}');
  9. $rep = Array ('Hello' , 'Word');
  10.  
  11.   echo TemplateParse("abc.tpl" , $pat , $rep );
  12.  
  13.  
  14.  

6. UserID - 20 Апреля, 2007 - 00:36:27 - перейти к сообщению
valenok

Я тебя понимаю. Лично я считаю, что к использованию процедурного метода программирования, либо ООП нужно подходить творчески. Конечно, нет смысла переписывать всё подряд в ООП, но и не стоит писать в процедурах, или функциях. К примеру, вот есть у тебя объект - сороконожка. Опиши положение каждой ноги в определённый момент времени... или что-то в этом роде. Либо же есть какая-то система на подобии CRM, CFM или что-то в это роде... залогинился человек, создался экземпляр класса, и сразу же для него есть методы к примеру получения почты, получения его статуса и каких-то других качественных и количественных показателей.
Т.е. при выборе метода программирования нужно подходить с позиции рациональности применения того, или иного метода.
7. valenok - 20 Апреля, 2007 - 09:40:28 - перейти к сообщению
Такой подход удобен когда объект (класс) выполняет все пользовательские операции, от проверки статуса, получения почты, написания почты, загрузки аватаров и т.д и т.п.

Тогда на самом деле удобней создать class user и с ним работать.
Но когда класс работает лишь по одному назначению - замены {header} на Hello и {Footer} на word
то ООП здесь не уместно.
8. -SCHATTEN- - 20 Апреля, 2007 - 18:21:55 - перейти к сообщению
Лично я соледарен с UserID в данном случае я бы тоже делал на ООП

 

Powered by ExBB FM 1.0 RC1