В марте от хабраюзера Wave появилась новость, заставившая затрепетать сердца всех любителей фрэймворка CodeIgniter: вот-вот должна появиться версия 2.0 этой ляльки. И вот, прошло уже больше двух месяцец, а воз и ныне там, «двушка» для скачивания с офф.сайта так и недоступна.И все бы ладно, да очень не хватало метода, который обещали внедрить во вторую версию фрэймворка — parse_string() в классе Parser, который бы позволил нам парсить шаблоны не только из файлов, но и из переменных. А так, как в одной из моих разработок есть потребность хранить небольшие шаблончики в БД, то, так сказать, стало мне невтерпеж.
Хвала разработчикам, нам дали возможность расширять все стандартные классы, чем мы и воспользуемся.
За реализацией этого метода — добро пожаловать под хаброкат.
Итак, для того, чтобы расширить функционал класса Parser, создадим файл "MY_Parser.php" в директории "application/libraries". Внутрь файла вставим следующий код:
- <?php
- class MY_Parser extends CI_Parser{
- function parse_string($string = "",$values = array(),$return = false){
-
- foreach ($values as $key => $val){
- if (is_array($val))
- {
- $string = $this->_parse_pair($key, $val, $string);
- }
- else
- {
- $string = $this->_parse_single($key, (string)$val, $string);
- }
- }
-
- $CI =& get_instance();
- ob_start();
- foreach ($values as $key => $val)
- $$key = $val;
-
- echo eval('?>'.preg_replace("/;*\s*\?>/", "; ?>", str_replace('<?=', '<?php echo ', $string)));
- $string = ob_get_contents();
- @ob_end_clean();
- if ($return) return $string;
- $CI->output->append_output($string);
- }
- }
- ?>
* This source code was highlighted with Source Code Highlighter.Вот и все! Теперь новый метод parse_string() будет доступен отовсюду, где бы вы ни подключили библиотеку Parser.
Параметры этот метод принимает почти что идентичны�� тем, что просит метод parse, за исключением того, что первым параметром, вместо пути до файла шаблона идет строковая переменная, содержащая текст шаблона. Второй параметр — также массив с переменными, а третий указывает то, как метод вернет обработанный шаблончик — return в переменную, или же напрямую в output.
Надеюсь кому-то это небольшое дополнение для CodeIgniter 1.7.2 будет полезным во время ожидания полноценного 2.0 релиза.
До новых встреч ;)
