Skip to content

Modular Extensions Parser Module

World Wide Web Server edited this page Jul 4, 2012 · 14 revisions

Category:HMVC Category:Modules Category: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. [code] <?php if (!defined('BASEPATH')) exit('No direct script access allowed'); /**

  • Parser Static Helper Class

  • 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")}

  • Place this file in application/helpers as parser_helper.php

  • and load as needed.

  • Usage:

  • $parsed_view = parser::parse($view, $data);

  • Version 0.2 (c) Wiredesignz 2008-02-28 **/ class Parser { function parse($view, $data = array()) { if ($template = $this->load->view($view, $data, TRUE)) {
    $template = parser::_parse($template, $data);

         while(preg_match('/\{\@(\w*)\("(.*)"\)\}/s', $template, $match))
         {
             print_r($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 = parser::_parse_pair($key, $val, $template);
    } else { $template = parser::_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 = parser::_match_pair($string, $variable))) { return $string; }

     $str = '';
     foreach ($data as $row)
     {
         $temp = $match['1'];
         foreach ($row as $key => $val)
         {
             if ( ! is_array($val))
             {
                 $temp = parser::_parse_single($key, $val, $temp);
             }
             else
             {
                 $temp = parser::_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;
    

    } }

[/code]

Clone this wiki locally