Ho creato una funzione per creare in automatico degli input su smarty, di tutti i tipi.
Forse quello più incompleto è il checkbox, che però per il momento non mi risulta utile cambiare.
Un’altra caratteristica di questa funzione è quella di fissare un value se presente in $_POST
o in $_REQUEST
ad esclusione dell’input type="password"
.
Il codice PHP è:
function smarty_tplinput($params, &$smarty) { $name=wp_specialchars(isset($params['name']) ? $params['name'] : ''); $type=wp_specialchars(isset($params['type']) ? $params['type'] : 'text'); $other=empty($params['other']) ? '' : ' '.$params['other']; if(isset($params['noautocompile'])) $params['autocompile']=false; if(!isset($params['autocompile']) && $type!='password') $params['autocompile']=true; elseif(!isset($params['autocompile'])) $params['autocompile']=false; $value=''; if(!empty($params['value'])) { $value=wp_specialchars($params['value']); } elseif($type=='file') { } elseif($params['autocompile']==false) { } else { if(!empty($_POST[$name])) $value=wp_specialchars($_POST[$name]); elseif(!empty($_REQUEST[$name])) $value=wp_specialchars($_REQUEST[$name]); } $checked=''; if(isset($params['checked'])) { $checked=$params['checked']==true ? ' checked="checked"' : ''; } elseif($type=='checkbox') { $checked=$value=='on' ? ' checked="checked"' : ''; $value=''; } elseif($type=='radio') { if(!empty($_POST[$name])) $checked=$_POST[$name]==$value; elseif(!empty($_REQUEST[$name])) $checked=$_REQUEST[$name]==$value; $checked=$checked ? ' checked="checked"' : ''; } switch($type) { case 'textarea': echo "<textarea{$other} name="{$name}" id="{$name}">n{$value}</textarea>"; break; default: $value=empty($value) ? '' : " value="{$value}""; echo "<input type="{$type}" name="{$name}" id="{$name}"{$value}{$checked}{$other} />"; break; } } $smarty->registerPlugin('function', 'input', 'smarty_tplinput');
È fatta per smarty 3 ma con qualche piccolo cambiamento dovrebbe essere compatibile anche con smarty 2.
I parametri sono name, type (di default text), other (per mettere altri parametri al tag.
Poi esistono i parametri value (per fissare l’attributo value) o checked (da usare con i checkbox e con i radio).
In assenza di questi si può modificare il value con gli attributi autocompile (true di default per tutti gli input tranne per type="password"
) o con noautocompile (alias per autocompile=false
).
La funzione è rilasciata sotto il pubblico dominio.
Update: mi sono accorto che in realtà ho usato una funzione di wordpress per sbaglio: wp_specialchars
.
Se vi dà errore, usate anche questo codice:
function wp_specialchars($str) { return htmlentities($str, ENT_QUOTES, 'UTF-8'); }