Hi 

Currently we are building a basic content management system where we
would like to be able to write as libral customized tags as possible,

for example  [[select:array_name,title]] or [[form:name]] in the
format of [[<function>:<arguments>]]

The problem that we are experiencing are that the arguments are being
parsed as a single string, does anybody know of what function / method
i can use to get around this? My default option is to write the
functions to split the single supplied argument into their respective
arguments, but i am sure there is a easier way around?

I have tried splitting them up, and rejoining them with a "," but i
think i am just redoing what php does internally.

Here is my current code,
<?php

// function = select, array = _title_,  name= select_title

$str = "{{select:_title_,select_title}}";  

parse($str);

function parse($str){
            $reg_ex  = '/\{\{([a-zA-Z0-9\-_]+):(.*)\}\}/';   //
{{function_name:paramaters,seperate,by,comma}}
            preg_match_all($reg_ex,$str,$matches,PREG_SET_ORDER);
            // $matches[0] = whole function 
            // $matches[1] = function
            // $matches[2] = content / params
            
           echo $match_count = count($matches);
                for ($i=0;$i<$match_count;$i++){
                    $output = null;
                    if(function_exists($matches[$i][1])){
                        //function has been declared 
                        // TO-DO: add safe mode function array to specify 
allowed functions
                                                #echo " DEBUG: 
{$matches[$i][1]} ( {$matches[$i][2]} ) <br
/>\n";
                                $args = explode(",",$matches[$i][2]);
                                $cnt = count($args);
                                $params = null;
                                for($j=0; $j < $cnt; $j++){
                                        #$params .= "\$args[$j]";
                                        $params .= $args[$j];
                                        $params .= ($j != ($cnt-1))? ",": "";
                                }// end for 
                                //eval("echo $params;");
                                //$output =
$matches[$i][1](implode(",",$args));//single str
                               $output = $matches[$i][1]($params);
                               $str = 
eregi_replace($matches[$i][0],$output,$str);
                   } //end if 
                   else {
                                // function not found or allowed remove tags
                                //echo "DEBUG: function not found<br />\n";
                                $str = eregi_replace($matches[$i][0],'',$str);
                   }// end else                 
                }//end for
          return $str;  
  }
  
  function select($array='',$name='',$extra=''){
                echo '<pre>';
                print_r(func_get_args());
                echo '</pre>';
  }
?>

Kind regards 
Jarratt

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to