Un ejemplo simplificado de como funcionaria todo esto
Código PHP :
<?php
$valoresIdiomas = array ( 1 );
$cadena='{idioma funcion=BANDERAS max=5 txt="Idioma"}';
$parametros= def( $cadena );
echo BANDERAS( $valoresIdiomas, $parametros );
$cadena='{idiomas funcion=BANDERAS multi max=3 txt="Idiomas"}';
print_r("<br>");
$valoresIdiomas = array ( 0,2 );
$parametros= def( $cadena );
echo BANDERAS( $valoresIdiomas, $parametros );
function def( $defi )
{
// Aquí empieza el código, que me gusratía poder sustituir por una expresión regular
$var="";
$defi=str_replace(array("{","}"),"",$defi);
$defi=explode(" ",$defi,2);
$parametros=$defi[1];
$valores[]=$defi[0];
$com=false;
for($car=0;$car<strlen($parametros);$car++)
{
$a.=$parametros[$car];
if ($parametros[$car] == '"' ) $com= !$com;
if ( $parametros[$car] == " " && !$com)
{
$valores[]=trim($a);
$a="";
}
}
$valores[]=$a;
// Aqui acaba
$parametros=NULL;
if (count($valores)!=1)
{
for($contador=1;$contador<count($valores);$contador++)
{
$p=explode("=",$valores[$contador]);
if( $p[1]=="" ) $p[1]="si";
$parametros[ $p[0] ]=$p[1];
}
}
else
{
$parametros="";
}
$parametros["campo"]=$valores[0];
return $parametros;
}
function BANDERAS( $valores, $parametros )
{
$idiomas=array (
array ("valor"=>0,"idioma"=>"Español" ),
array ("valor"=>1,"idioma"=>"Francés" ),
array ("valor"=>2,"idioma"=>"Inglés" ),
array ("valor"=>3,"idioma"=>"Italiano" ),
array ("valor"=>4,"idioma"=>"Portugués" )
);
extract($parametros);
$modo=( $multi || $check ) ? "checkbox":"radio";
$multi=( $multi || $check ) ? "[]":"";
$html=str_replace('"',"",$txt).": ";
$contador=0;
foreach($idiomas as $idioma)
{
$contador++;
$sel= ( in_array($idioma['valor'], $valores ) ) ? ' checked="checked" ':'';
$html.='<input type="'.$modo.'" name="'.$campo.$multi.'" value="'.$idioma['valor'].'" '.$sel.'/>'.$idioma['idioma'];
if ( $max && ($contador==$max) ) { break; }
}
return $html;
}
?>
Las diferencias con el código final son que,
1º "
cadena" es extraida mediante una expresión, de un archivo de texto, don de se define la plantilla
2º que mediante comparaciones creo en tiempo de ejecución la función "
idioma","
idiomas" o "
BANDERAS" y cargo un archivo con el mismo nombre, y que contiene el código correspondiente para la función.
Comentaste que en el código anterior, daba un error por no haber definido $a, a mi no me lo dió, por lo que creo que no tengo configurado bien cual ¿ el PHP o el Apache ( uso WAMPSERVER )?
Gracias, por tu tiempo.