Revision 2049 | Revision 2254 | Zur aktuellen Revision | Blame | Vergleich mit vorheriger | Letzte Änderung | Log anzeigen | RSS feed
<?php/*** CodeIgniter** An open source application development framework for PHP** This content is released under the MIT License (MIT)** Copyright (c) 2014 - 2018, British Columbia Institute of Technology** Permission is hereby granted, free of charge, to any person obtaining a copy* of this software and associated documentation files (the "Software"), to deal* in the Software without restriction, including without limitation the rights* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell* copies of the Software, and to permit persons to whom the Software is* furnished to do so, subject to the following conditions:** The above copyright notice and this permission notice shall be included in* all copies or substantial portions of the Software.** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN* THE SOFTWARE.** @package CodeIgniter* @author EllisLab Dev Team* @copyright Copyright (c) 2008 - 2014, EllisLab, Inc. (https://ellislab.com/)* @copyright Copyright (c) 2014 - 2018, British Columbia Institute of Technology (http://bcit.ca/)* @license http://opensource.org/licenses/MIT MIT License* @link https://codeigniter.com* @since Version 1.0.0* @filesource*/defined('BASEPATH') OR exit('No direct script access allowed');/*** Parser Class** @package CodeIgniter* @subpackage Libraries* @category Parser* @author EllisLab Dev Team* @link https://codeigniter.com/user_guide/libraries/parser.html*/class CI_Parser {/*** Left delimiter character for pseudo vars** @var string*/public $l_delim = '{';/*** Right delimiter character for pseudo vars** @var string*/public $r_delim = '}';/*** Reference to CodeIgniter instance** @var object*/protected $CI;// --------------------------------------------------------------------/*** Class constructor** @return void*/public function __construct(){$this->CI =& get_instance();log_message('info', 'Parser Class Initialized');}// --------------------------------------------------------------------/*** Parse a template** Parses pseudo-variables contained in the specified template view,* replacing them with the data in the second param** @param string* @param array* @param bool* @return string*/public function parse($template, $data, $return = FALSE){$template = $this->CI->load->view($template, $data, TRUE);return $this->_parse($template, $data, $return);}// --------------------------------------------------------------------/*** Parse a String** Parses pseudo-variables contained in the specified string,* replacing them with the data in the second param** @param string* @param array* @param bool* @return string*/public function parse_string($template, $data, $return = FALSE){return $this->_parse($template, $data, $return);}// --------------------------------------------------------------------/*** Parse a template** Parses pseudo-variables contained in the specified template,* replacing them with the data in the second param** @param string* @param array* @param bool* @return string*/protected function _parse($template, $data, $return = FALSE){if ($template === ''){return FALSE;}$replace = array();foreach ($data as $key => $val){$replace = array_merge($replace,is_array($val)? $this->_parse_pair($key, $val, $template): $this->_parse_single($key, (string) $val, $template));}unset($data);$template = strtr($template, $replace);if ($return === FALSE){$this->CI->output->append_output($template);}return $template;}// --------------------------------------------------------------------/*** Set the left/right variable delimiters** @param string* @param string* @return void*/public function set_delimiters($l = '{', $r = '}'){$this->l_delim = $l;$this->r_delim = $r;}// --------------------------------------------------------------------/*** Parse a single key/value** @param string* @param string* @param string* @return string*/protected function _parse_single($key, $val, $string){return array($this->l_delim.$key.$this->r_delim => (string) $val);}// --------------------------------------------------------------------/*** Parse a tag pair** Parses tag pairs: {some_tag} string... {/some_tag}** @param string* @param array* @param string* @return string*/protected function _parse_pair($variable, $data, $string){$replace = array();preg_match_all('#'.preg_quote($this->l_delim.$variable.$this->r_delim).'(.+?)'.preg_quote($this->l_delim.'/'.$variable.$this->r_delim).'#s',$string,$matches,PREG_SET_ORDER);foreach ($matches as $match){$str = '';foreach ($data as $row){$temp = array();foreach ($row as $key => $val){if (is_array($val)){$pair = $this->_parse_pair($key, $val, $match[1]);if ( ! empty($pair)){$temp = array_merge($temp, $pair);}continue;}$temp[$this->l_delim.$key.$this->r_delim] = $val;}$str .= strtr($match[1], $temp);}$replace[$match[0]] = $str;}return $replace;}}