|
Posted by RaTT on 10/03/17 11:17
Hi Guys
Thanks for your support, i will post the function once done.
Regards
Jarratt
On 5/31/05, Jochem Maas <jochem@iamjochem.com> wrote:
> RaTT wrote:
> > 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.
>
> some funcs that might help you:
>
> compact()
> extract()
> call_user_func()
> call_user_func_array()
>
> also I recommend doing everything you can not to have to use
> an eval() statement anywhere with this code as that would be comparatively
> slow and you have to start worrying about possible security issues...
>
> lastly my personal preference is towards the preg_*() funcs
> rather than the eregi_*() funcs. regardless you should minimize the use
> of regular expressions if you can... use explode(), strstr() and the like
> where ever possible.
>
> if you find a neat way of making use of call_user_func_array() then I think
> you can cut the step where you rebuild the params string with commas.
>
> also you might want to check out the way the Smarty guys implemented their
> plugin/tag functionality - you may not like their style or implementation
> but no doubt there is some overlap in what you are trying to do and what
> they have done - so it may give you some ideas.
>
> good luck.
>
> >
> > 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
> >
>
>
Navigation:
[Reply to this message]
|