
Takže vytvořte UDT třeba strip_attribcontrol:
Code: Select all
$input = $params['input'];
$first_opt_pos = stripos($input,"<option value=");
$select_start = substr($input,0,$first_opt_pos);
$select_end = "</select>";
$options = substr($input,$first_opt_pos);
$options = substr($options,0,-strlen($select_end)-1);
$options_count = substr_count($options,"<option");
$select_options = array();
for($i = 1; $i <= $options_count; $i++) {
$u_pos = stripos($options, "\"");
$options = substr($options, $u_pos + 1);
$u_pos = stripos($options, "\"");
$select_value = substr($options, 0, $u_pos);
$u_pos = stripos($options, ">");
$options = substr($options, $u_pos + 1);
$u_pos = stripos($options, "<");
$select_name = substr($options, 0, $u_pos);
$u_pos = stripos($options, ">");
$options = substr($options, $u_pos + 1);
$select_options[$select_value] = $select_name;
};
$smarty->assign('select_start',$select_start);
$smarty->assign('select_end',$select_end);
$smarty->assign('select_options',$select_options);
A pak už je potřeba v šabloně toto UDT zavolat s parametrem input, do kterého dáme tu proměnnou, příklad bude názornější:
{strip_attribcontrol input=$attributes[0]->control}
To nám naplní proměnné {$select_start} - počáteční tag select se správným name atd.
{$select_end} - vpodstatě jenom , mám to tam pro přehlednost
a hlavně array {$select_options} kde jako key je vždy hodnota value, tagu select, kterou je potřeba dodržet, pro správné fungování košíku a k tomuto key je vždy přiřazený adekvátní název té atributy.
No, zase lepší bude příklad šablony:
{strip_attribcontrol input=$attributes[0]->control}
{$select_start}
{foreach from=$select_options key=value item=name}
{$name}
{/foreach}
{$select_end}
Tahle konkrétní šablona sice vypíše úplně to stejné, jako původní attrib-control, ale určitě v tom cítíte více volnosti, co se vlastních úprav týče

pozn: tento příklad funguje jenom pro jeden attribset, ale není takový problém ho modifikovat pro více, stačí si buď udělat cyklus, kde se ve volání toho UDT bude měnit index u array $attributes, případně si manuálně změnou toho indexu můžete dokonce pro každý attribset udělat uplně jiný styl...