image В марте от хабраюзера Wave появилась новость, заставившая затрепетать сердца всех любителей фрэймворка CodeIgniter: вот-вот должна появиться версия 2.0 этой ляльки. И вот, прошло уже больше двух месяцец, а воз и ныне там, «двушка» для скачивания с офф.сайта так и недоступна.

И все бы ладно, да очень не хватало метода, который обещали внедрить во вторую версию фрэймворка — parse_string() в классе Parser, который бы позволил нам парсить шаблоны не только из файлов, но и из переменных. А так, как в одной из моих разработок есть потребность хранить небольшие шаблончики в БД, то, так сказать, стало мне невтерпеж.

Хвала разработчикам, нам дали возможность расширять все стандартные классы, чем мы и воспользуемся.

За реализацией этого метода — добро пожаловать под хаброкат.

Итак, для того, чтобы расширить функционал класса Parser, создадим файл "MY_Parser.php" в директории "application/libraries". Внутрь файла вставим следующий код:

  1. <?php
  2. class MY_Parser extends CI_Parser{
  3.   function parse_string($string = "",$values = array(),$return = false){
  4.  
  5.       foreach ($values as $key => $val){
  6.         if (is_array($val))
  7.         {
  8.           $string = $this->_parse_pair($key, $val, $string);    
  9.         }
  10.         else
  11.         {
  12.           $string = $this->_parse_single($key, (string)$val, $string);
  13.         }
  14.       }
  15.     
  16.     $CI =& get_instance();
  17.     ob_start();
  18.     foreach ($values as $key => $val)
  19.       $$key = $val;
  20.  
  21.     echo eval('?>'.preg_replace("/;*\s*\?>/", "; ?>", str_replace('<?=', '<?php echo ', $string)));
  22.     $string = ob_get_contents();
  23.     @ob_end_clean();
  24.     if ($return) return $string;
  25.     $CI->output->append_output($string);
  26.   }
  27. }
  28. ?>
* This source code was highlighted with Source Code Highlighter.


Вот и все! Теперь новый метод parse_string() будет доступен отовсюду, где бы вы ни подключили библиотеку Parser.

Параметры этот метод принимает почти что идентичны�� тем, что просит метод parse, за исключением того, что первым параметром, вместо пути до файла шаблона идет строковая переменная, содержащая текст шаблона. Второй параметр — также массив с переменными, а третий указывает то, как метод вернет обработанный шаблончик — return в переменную, или же напрямую в output.

Надеюсь кому-то это небольшое дополнение для CodeIgniter 1.7.2 будет полезным во время ожидания полноценного 2.0 релиза.

До новых встреч ;)