Part of the EllisLab Network
x
 
Create New Page
 View Previous Changes    ( Last updated by sophistry )

Modular Extensions - Parser Module

Category:Module | Category:Module -> Parser

This parser module is designed for use with the Modular Extensions - HMVC system.
It allows the use of function calls from inside parsed templates.

<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
/**
* Parser Module for Modular Extensions - HMVC

* Adapted from CodeIgniter Parser Class
* @copyright   Copyright (c) 2006, EllisLab, Inc.
* @license     http://codeigniter.com/user_guide/license.html

* Allows the use of functions in parsed templates ie: {@site_url("home/{page}"}
*
* Version 0.7 (c) Wiredesignz 2008-06-13
**/
class Parser extends Controller
{
    
function Parser()
    
{
        parent
::Controller();
    
}
    
    
function parse($view$data = array())
    
{
        
if ($template $this->load->view($view$dataTRUE)) 
        
{            
            $template 
$this->_parse($template$data);
                        
            while(
preg_match('/\{\@(\w*)\("??(.*)"??\)\}/siU'$template$match))
            
{
                $template 
str_replace($match[0]$match[1]($match[2]), $template);
            
}
                        
            
return $template;
        
}
    }
    
    
function _parse($template$data)
    
{
        
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);
            
}
        }
        
return $template;
    
}
    
    
function _parse_single($key$val$string)
    
{
        
return str_replace('{'.$key.'}'$val$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);
    
}

    
function _match_pair($string$variable)
    
{
        
if (!preg_match('/{'.$variable.'}(.*){\/'.$variable.'}/s'$string$match))
        
{
            
return FALSE;
        
}
        
        
return $match;
    
}

Categories: