213 行
		
	
	
	
		
			4.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			213 行
		
	
	
	
		
			4.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
|  | <?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed'); | ||
|  | /** | ||
|  |  * CodeIgniter | ||
|  |  * | ||
|  |  * An open source application development framework for PHP 5.1.6 or newer | ||
|  |  * | ||
|  |  * @package		CodeIgniter | ||
|  |  * @author		ExpressionEngine Dev Team | ||
|  |  * @copyright	Copyright (c) 2008 - 2011, EllisLab, Inc. | ||
|  |  * @license		http://codeigniter.com/user_guide/license.html | ||
|  |  * @link		http://codeigniter.com | ||
|  |  * @since		Version 1.0 | ||
|  |  * @filesource | ||
|  |  */ | ||
|  | 
 | ||
|  | // ------------------------------------------------------------------------
 | ||
|  | 
 | ||
|  | /** | ||
|  |  * Parser Class | ||
|  |  * | ||
|  |  * @package		CodeIgniter | ||
|  |  * @subpackage	Libraries | ||
|  |  * @category	Parser | ||
|  |  * @author		ExpressionEngine Dev Team | ||
|  |  * @link		http://codeigniter.com/user_guide/libraries/parser.html | ||
|  |  */ | ||
|  | class CI_Parser { | ||
|  | 
 | ||
|  | 	var $l_delim = '{'; | ||
|  | 	var $r_delim = '}'; | ||
|  | 	var $object; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 *  Parse a template | ||
|  | 	 * | ||
|  | 	 * Parses pseudo-variables contained in the specified template view, | ||
|  | 	 * replacing them with the data in the second param | ||
|  | 	 * | ||
|  | 	 * @access	public | ||
|  | 	 * @param	string | ||
|  | 	 * @param	array | ||
|  | 	 * @param	bool | ||
|  | 	 * @return	string | ||
|  | 	 */ | ||
|  | 	public function parse($template, $data, $return = FALSE) | ||
|  | 	{ | ||
|  | 		$CI =& get_instance(); | ||
|  | 		$template = $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 | ||
|  | 	 * | ||
|  | 	 * @access	public | ||
|  | 	 * @param	string | ||
|  | 	 * @param	array | ||
|  | 	 * @param	bool | ||
|  | 	 * @return	string | ||
|  | 	 */ | ||
|  | 	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 | ||
|  | 	 * | ||
|  | 	 * @access	public | ||
|  | 	 * @param	string | ||
|  | 	 * @param	array | ||
|  | 	 * @param	bool | ||
|  | 	 * @return	string | ||
|  | 	 */ | ||
|  | 	function _parse($template, $data, $return = FALSE) | ||
|  | 	{ | ||
|  | 		if ($template == '') | ||
|  | 		{ | ||
|  | 			return FALSE; | ||
|  | 		} | ||
|  | 
 | ||
|  | 		foreach ($data as $key => $val) | ||
|  | 		{ | ||
|  | 			if (is_array($val)) | ||
|  | 			{ | ||
|  | 				$template = $this->_parse_pair($key, $val, $template); | ||
|  | 			} | ||
|  | 			else | ||
|  | 			{ | ||
|  | 				$template = $this->_parse_single($key, (string)$val, $template); | ||
|  | 			} | ||
|  | 		} | ||
|  | 
 | ||
|  | 		if ($return == FALSE) | ||
|  | 		{ | ||
|  | 			$CI =& get_instance(); | ||
|  | 			$CI->output->append_output($template); | ||
|  | 		} | ||
|  | 
 | ||
|  | 		return $template; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	// --------------------------------------------------------------------
 | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 *  Set the left/right variable delimiters | ||
|  | 	 * | ||
|  | 	 * @access	public | ||
|  | 	 * @param	string | ||
|  | 	 * @param	string | ||
|  | 	 * @return	void | ||
|  | 	 */ | ||
|  | 	function set_delimiters($l = '{', $r = '}') | ||
|  | 	{ | ||
|  | 		$this->l_delim = $l; | ||
|  | 		$this->r_delim = $r; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	// --------------------------------------------------------------------
 | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 *  Parse a single key/value | ||
|  | 	 * | ||
|  | 	 * @access	private | ||
|  | 	 * @param	string | ||
|  | 	 * @param	string | ||
|  | 	 * @param	string | ||
|  | 	 * @return	string | ||
|  | 	 */ | ||
|  | 	function _parse_single($key, $val, $string) | ||
|  | 	{ | ||
|  | 		return str_replace($this->l_delim.$key.$this->r_delim, $val, $string); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	// --------------------------------------------------------------------
 | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 *  Parse a tag pair | ||
|  | 	 * | ||
|  | 	 * Parses tag pairs:  {some_tag} string... {/some_tag} | ||
|  | 	 * | ||
|  | 	 * @access	private | ||
|  | 	 * @param	string | ||
|  | 	 * @param	array | ||
|  | 	 * @param	string | ||
|  | 	 * @return	string | ||
|  | 	 */ | ||
|  | 	function _parse_pair($variable, $data, $string) | ||
|  | 	{ | ||
|  | 		if (FALSE === ($match = $this->_match_pair($string, $variable))) | ||
|  | 		{ | ||
|  | 			return $string; | ||
|  | 		} | ||
|  | 
 | ||
|  | 		$str = ''; | ||
|  | 		foreach ($data as $row) | ||
|  | 		{ | ||
|  | 			$temp = $match['1']; | ||
|  | 			foreach ($row as $key => $val) | ||
|  | 			{ | ||
|  | 				if ( ! is_array($val)) | ||
|  | 				{ | ||
|  | 					$temp = $this->_parse_single($key, $val, $temp); | ||
|  | 				} | ||
|  | 				else | ||
|  | 				{ | ||
|  | 					$temp = $this->_parse_pair($key, $val, $temp); | ||
|  | 				} | ||
|  | 			} | ||
|  | 
 | ||
|  | 			$str .= $temp; | ||
|  | 		} | ||
|  | 
 | ||
|  | 		return str_replace($match['0'], $str, $string); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	// --------------------------------------------------------------------
 | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 *  Matches a variable pair | ||
|  | 	 * | ||
|  | 	 * @access	private | ||
|  | 	 * @param	string | ||
|  | 	 * @param	string | ||
|  | 	 * @return	mixed | ||
|  | 	 */ | ||
|  | 	function _match_pair($string, $variable) | ||
|  | 	{ | ||
|  | 		if ( ! preg_match("|" . preg_quote($this->l_delim) . $variable . preg_quote($this->r_delim) . "(.+?)". preg_quote($this->l_delim) . '/' . $variable . preg_quote($this->r_delim) . "|s", $string, $match)) | ||
|  | 		{ | ||
|  | 			return FALSE; | ||
|  | 		} | ||
|  | 
 | ||
|  | 		return $match; | ||
|  | 	} | ||
|  | 
 | ||
|  | } | ||
|  | // END Parser Class
 | ||
|  | 
 | ||
|  | /* End of file Parser.php */ | ||
|  | /* Location: ./system/libraries/Parser.php */ |