Как стать автором
Обновить

Добавляем так недостающий parse_string()

Время на прочтение2 мин
Количество просмотров1.3K
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 релиза.

До новых встреч ;)
Теги:
Хабы:
Всего голосов 14: ↑10 и ↓4+6
Комментарии7

Публикации