[HowTo] Cart - šablona přidání do košíku - rozřezání attrib->control

Česká/Slovenská podpora pro CMS Made Simple
Post Reply
lapak
Forum Members
Forum Members
Posts: 33
Joined: Mon Sep 06, 2010 8:43 pm

[HowTo] Cart - šablona přidání do košíku - rozřezání attrib->control

Post by lapak »

Jedná se o e-commerce založenou na modulech Products, Cart, Orders... Pokud máte u produktů nějaké atributy, tak pak v šabloně pro přidání produktu do košíku je výběr atribut pro tento produkt použita proměnná attrib->control, ve které je kompletní dropdown menu se všemi atributami. Což ale není moc výhodné, pokud chcete tento dropdown nějak upravovat, např. si chcete k některým vlastnostem přidat css classes, nebo začlenit atd. atd. Tak jsem si udělal malý UDT, který rozseká attrib->control na proměnné, které už si pak v šabloně můžu použít jak je libo, a cítil bych se sobecky, kdybych se nepodělil :)

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 :) Tak třeba se to někomu bude hodit...

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...
Post Reply

Return to “Czech/Slovak - Česky/Slovensky”