[solved]Smarty nebo UDT pro vymazání určitého produktu z košíku - Cart, Products

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

[solved]Smarty nebo UDT pro vymazání určitého produktu z košíku - Cart, Products

Post by lapak »

Pořád si hraju s poměrně specifickým e-shopem, a ted jsem se zase zasekl na vytváření možností doručení atd. (bude stránka, kde si zákazník vybere poručení českou poštou, PPL, osobně atd.) Jelikož jsem nenašel shipping modul, který by podporoval výběr různých metod doručení a k tomu třeba ještě umožňoval poštovné zdarma při určité částce, tak jsem se to rozhodl řešit jednoduše pomocí produktů - tj. budu mít produkt "česká pošta", "PPL", atd. a stránku, kde si uživatel vybírá způsob doručení, tak jednoduše udělám template tak, aby si tím vpodstatě vložil adekvátní produkt do košíku... No ale tady navstává problém, že kdyby toto uživatel udělal, pak se vrátil jinam na stránky a znovu projel tou procedurou výběru, tak mu to tam ten produkt dá podruhé (prostě druhé poštovné). Proto chci na začátek stránky pro ten výber poštovného dát samrty nebo UDT, který zkontroluje jestli už poštovné (tj. produkt s určitým id) v košíku není a pokud je, tak ho smaže (a uživatel pak pokračuje a vybere si ho znovu...).

Zatím jsem se dostal k tomuto, na stránce, která bude sloužit pro výber poštovného:

{Cart product=7} // pod tímto id je produkt - poštovné
{Cart action='viewcart' viewcarttemplate='viewcart_init'} // zde volaná šablona je úplně prázdna, pouze potřebuji naplnit proměnné, které používá Cart

a nyní, když si nechám vypsat {$cartitems|print_r}
tak tam mám, jestli to dobře chápu array a v ní Objekty, které představují jednotlivé produkty. Pro jistotu vám to sem dám, pořád těm objektům moc nerozumím: (v tomto případě jsou v košíku dva produkty)

Code: Select all

stdClass Object ( [product_id] => 2 [sku] => 00301 [quantity] => 1 [base_price] => 0 [type] => 1 [pending] => [unit_weight] => 0 [unit_price] => 123 [summary] => Makové snění Platno - 20x30 (123.00)  [item_total] => [file_location] => http://localhost/linnette-obrazy/uploads/Products/product_2 [flds] => Array ( [image] => stdClass Object *RECURSION* [pomer_stran] => stdClass Object *RECURSION* ) [categories] => Array ( [0] => stdClass Object ( [id] => 1 [name] => Bokeh [value] => [file_location] => http://localhost/linnette-obrazy/uploads/Products/categories/1 ) [1] => stdClass Object ( [id] => 2 [name] => Detail a zátiší [value] => [file_location] => http://localhost/linnette-obrazy/uploads/Products/categories/2 ) [2] => stdClass Object ( [id] => 3 [name] => Anything else [value] => [file_location] => http://localhost/linnette-obrazy/uploads/Products/categories/3 ) ) [quantity_box] =>  [remove_box] =>  ) stdClass Object ( [product_id] => 7 [sku] => [quantity] => 1 [base_price] => 100 [type] => 1 [pending] => [unit_weight] => 0 [unit_price] => 100 [summary] => Poštovné - Česká Pošta  [item_total] => [file_location] => http://localhost/linnette-obrazy/uploads/Products/product_7 [flds] => Array ( [image] => stdClass Object *RECURSION* [pomer_stran] => stdClass Object *RECURSION* ) [categories] => Array ( [0] => stdClass Object ( [id] => 1 [name] => Bokeh [value] => [file_location] => http://localhost/linnette-obrazy/uploads/Products/categories/1 ) [1] => stdClass Object ( [id] => 2 [name] => Detail a zátiší [value] => [file_location] => http://localhost/linnette-obrazy/uploads/Products/categories/2 ) [2] => stdClass Object ( [id] => 3 [name] => Anything else [value] => [file_location] => http://localhost/linnette-obrazy/uploads/Products/categories/3 ) ) [quantity_box] =>  [remove_box] =>  ) Array Array

Takže teď potřebuji smarty nebo udt, které přijde na začátek té stránky, ve smyslu:
{foreach from objekty v $cartitems}
{if id produktu = x}
 smaž z $cartitems objekt s tímto produktem
{/if}
{/foreach}

Doufám že mě chápete a díky za všechny odpovědi a nápady :)
Last edited by lapak on Fri Sep 17, 2010 2:24 pm, edited 1 time in total.
osxfil
Forum Members
Forum Members
Posts: 186
Joined: Wed Apr 01, 2009 6:03 pm

Re: Smarty nebo UDT pro vymazání určitého produktu z košíku - Cart, Products, ...

Post by osxfil »

když vydržíš pár dní, tak bych se na to mohl podívat. Teď mám zrovna na localhostu rozdělaný projekt se Shop/CartMadeSImple, který musím přesunout na hosting (až to schválí klient) a pak bych si tam mohl nainstalovat Calguyovo moduly (bohužel nelze mít nainstalované obě verze současně)
lapak
Forum Members
Forum Members
Posts: 33
Joined: Mon Sep 06, 2010 8:43 pm

Re: Smarty nebo UDT pro vymazání určitého produktu z košíku - Cart, Products, ...

Post by lapak »

osxfil wrote: když vydržíš pár dní, tak bych se na to mohl podívat. Teď mám zrovna na localhostu rozdělaný projekt se Shop/CartMadeSImple, který musím přesunout na hosting (až to schválí klient) a pak bych si tam mohl nainstalovat Calguyovo moduly (bohužel nelze mít nainstalované obě verze současně)
To bych ti byl zavázán, nemusíš spěchat, budu rád za každou radu, smarty dokumentace je opravdu bídná a metodu pokus-omyl už jsem asi taky vyčerpal :)

Btw jak ty řešíš tyhle možnosti doručení? Ma to shop made simple nějak líp vyřešený? Teda na tenhle projekt ho použít nemůžu, protože tam docela nutně potřebuju trošku advanced podporu atribut u produktů, ale třeba pro příště...
osxfil
Forum Members
Forum Members
Posts: 186
Joined: Wed Apr 01, 2009 6:03 pm

Re: Smarty nebo UDT pro vymazání určitého produktu z košíku - Cart, Products, ...

Post by osxfil »

V CartMadeSimple se dá nastavit více způsobů dopravy, u kterých se dá nastavit paušální cena za dopravu nebo cena na základě hmotnosti + počet dní na doručení zásilky. Taky se dá nastavit, že zákazník musí souhlasit před odesláním objednávky s obchodními podmínkami (ty mohou být buď ve formě krátké zprávy nebo extra stránky) a počet dní na doručení. Kombinaci ceny za dopravy s možností dopravy zdarma při dosažení určité hodnoty objednávky jsem ještě neřešil, takže to bude premiéra, ale myslím, že to půjde :)
kuzmany
Power Poster
Power Poster
Posts: 448
Joined: Tue Oct 10, 2006 5:00 pm
Location: Bratislava

Re: Smarty nebo UDT pro vymazání určitého produktu z košíku - Cart, Products, ...

Post by kuzmany »

Ahoj,

aj ked je to divne, naozaj e-commerce (Products, Cart, Orders) nastrojoch nie je mozne vyberat z viacerych moznosti dorucenia. Vzdy je mozne mat zapnuty len jede shippigng modul a tie teraz vedia robit cenu len podla hmotnosti, krajiny nakupujuceho alebo vysky ceny objednaneho tovaru.

Myslim ze podobny pripad je az s platobnymi branami, vzdy je mozne mat na iba jednu platobnu branu, ci uz Paypal alebo platba kartou, ale nie je mozne aby si klient vybral jednu z moznosti.

To su asi najhlavnejsie dovody, preco e-coomerce v CMS nevyuzivaju, aj ked to je robustny system a je na to kopec sikovnych addonov (ManyBasket, Promotions atd)
Yes, it's me: MleCMS, MleDomains, ModuleGenerator, URLWatchdog, Youtuber, Extended Content Blocks, Extended Tools, Analytics etc.
kuzmany
Power Poster
Power Poster
Posts: 448
Joined: Tue Oct 10, 2006 5:00 pm
Location: Bratislava

Re: Smarty nebo UDT pro vymazání určitého produktu z košíku - Cart, Products, ...

Post by kuzmany »

Inac na to tvoje riesenie zabudni, to co si pisal neverim ze moze realne fungovat :) Bez zasahu do PHP to nevyries (lepsie bude asi pouzit Shop Made Simple atd, aj ked tieto moduly nepoznam vobec)
Yes, it's me: MleCMS, MleDomains, ModuleGenerator, URLWatchdog, Youtuber, Extended Content Blocks, Extended Tools, Analytics etc.
lapak
Forum Members
Forum Members
Posts: 33
Joined: Mon Sep 06, 2010 8:43 pm

Re: Smarty nebo UDT pro vymazání určitého produktu z košíku - Cart, Products, ...

Post by lapak »

Shop made simple nemůžu použít protože nepodporuje atributy u produktů a zrovna u tohodle shopu je to docela klíčová vlastnost... Ale řešení přes zvlášť produkty pro ty způsoby doručení není zas takovej problém, přece když mám nějakou array, tak nemůže být takovej problém z ni jeden záznam smazat, já jen neznám tu syntaxi... Zbytek už pomocí pár cyklů a podmínek nebude problém, opravdu jediné co potřebuji tak kód, kterej smaže jeden záznam v array... Pokud víte jak na tohle, tak mě třeba alespoň pošťouchněte :) správný názvy proměnných atd. už si tam doplním...

Každopádně díky za odpovědi
kuzmany
Power Poster
Power Poster
Posts: 448
Joined: Tue Oct 10, 2006 5:00 pm
Location: Bratislava

Re: Smarty nebo UDT pro vymazání určitého produktu z košíku - Cart, Products, ...

Post by kuzmany »

Cez Smarty priamo to asi nepojde, mozno od verzie 3, ktora je este v RC

Ale da sa to smelo napr cez UDT. Staci si ho vytvorit, ako parameter mu predat ten object a s tym objectom potom pracovat v PHP cez $params["mojobject"] . A uz si treb urobit len foreach, urobit unset a vratit cez $smarty->assign('cartitems',$novyobject). Mozno bude fungovat:)

Ale je to salamunske riesenie
Yes, it's me: MleCMS, MleDomains, ModuleGenerator, URLWatchdog, Youtuber, Extended Content Blocks, Extended Tools, Analytics etc.
osxfil
Forum Members
Forum Members
Posts: 186
Joined: Wed Apr 01, 2009 6:03 pm

Re: Smarty nebo UDT pro vymazání určitého produktu z košíku - Cart, Products, ...

Post by osxfil »

přesně něco takové mám na mysli, ale musím se k tomu dostat, abych to vyzkoušel.
lapak
Forum Members
Forum Members
Posts: 33
Joined: Mon Sep 06, 2010 8:43 pm

Re: Smarty nebo UDT pro vymazání určitého produktu z košíku - Cart, Products, ...

Post by lapak »

Tak sem se pustil do studia PHP a nakonec smazání jedné položky v té array vůbec nebylo složitý :) Zatím můj UDT vypadá takhle:

Code: Select all

$cartitems = $params['cartitems'];

$i = 0;
while ($i <= (count($cartitems)-1)) {
 if($cartitems[$i]->product_id == 7) {
  unset($cartitems[$i]);
 };
$i++;
};

$cartitems = array_values($cartitems);
$smarty->assign('cartitems', $cartitems);
Takže docílím toho, že mám na konci v smarty proměnné {$cartitems} opravdu jenom produkty bez poštovného. No ale narazil jsem na to, že teď to musím nějak uložit tam, kde modul Cart tyhle údaje uchovává, protože teď, když se vrátím do košíku, tak tam to poštovné pořád je, protže si Cart ty údaje bere samozřejmě odněkud jinud, než z mojí zbrusunové proměnné a já nevím odkud :)
kuzmany
Power Poster
Power Poster
Posts: 448
Joined: Tue Oct 10, 2006 5:00 pm
Location: Bratislava

Re: Smarty nebo UDT pro vymazání určitého produktu z košíku - Cart, Products, ...

Post by kuzmany »

protže si Cart ty údaje bere samozřejmě odněkud jinud, než z mojí zbrusunové proměnné a já nevím odkud :)
[/quote]

bingo! :) smarty je sablonovaci system, stara sa len o vystup dat. spracovvanie dat robi samotny modul a je nutna modifikacie PHP suborov. K tvojmu rieseniu som skepticky :) a ani som ho nepochopil ;)
Yes, it's me: MleCMS, MleDomains, ModuleGenerator, URLWatchdog, Youtuber, Extended Content Blocks, Extended Tools, Analytics etc.
lapak
Forum Members
Forum Members
Posts: 33
Joined: Mon Sep 06, 2010 8:43 pm

Re: Smarty nebo UDT pro vymazání určitého produktu z košíku - Cart, Products, ...

Post by lapak »

kuzmany wrote: protže si Cart ty údaje bere samozřejmě odněkud jinud, než z mojí zbrusunové proměnné a já nevím odkud :)
bingo! :) smarty je sablonovaci system, stara sa len o vystup dat. spracovvanie dat robi samotny modul a je nutna modifikacie PHP suborov. K tvojmu rieseniu som skepticky :) a ani som ho nepochopil ;)
[/quote]

Tak někam se ty data ukládat musí a php soubory to nebudou :) Může to být databáze, můžou to být cookies, může to být session, všechno je přeci editovatelný i mým php souborem, aniž bych editoval core toho modulu. Já jenom právě nechápu systém, jakým to Cart ukládá, abych ho pak mohl alterovat, proto sem píšu, protože někdo ten systém chápat musí :)

Moje řešení okleštilo aktuální seznam produktů o ty co tam nechci, tudíž pokud ho použiju třeba před výpisem košíku, tak tam opravdu nebudou, ale v tom úložišti Cartu pořád jsou, takže jakmile si pro ně sáhne jinej modul, např. Orders, tak ten je tam opět vidí...
lapak
Forum Members
Forum Members
Posts: 33
Joined: Mon Sep 06, 2010 8:43 pm

Re: Smarty nebo UDT pro vymazání určitého produktu z košíku - Cart, Products, ...

Post by lapak »

A taky že ukládá, je to v session cgcart a je to base64 encodovany, takže když jsem si udělal UDT:

Code: Select all

echo base64_decode($_SESSION[cgcart]);
tak dostanu (v tomto příkladě jsou v košíku dva produkty:)

Code: Select all

a:2:{i:0;O:17:"cg_ecomm_cartitem":15:{s:26:"cg_ecomm_cartitem_source";s:8:"Products";s:30:"cg_ecomm_cartitem_product_id";i:2;s:23:"cg_ecomm_cartitem_sku";s:5:"00301";s:28:"cg_ecomm_cartitem_quantity";i:1;s:30:"cg_ecomm_cartitem_base_price";d:0;s:30:"cg_ecomm_cartitem_attributes";a:1:{i:0;O:8:"stdClass":5:{s:9:"attribset";i:11;s:8:"attrname";s:8:"Varianta";s:4:"name";s:14:"Platno - 20x30";s:10:"adjustment";s:3:"123";s:3:"sku";s:5:"00301";}}s:24:"cg_ecomm_cartitem_type";i:1;s:29:"cg_ecomm_cartitem_estimated";b:0;s:27:"cg_ecomm_cartitem_pending";b:0;s:31:"cg_ecomm_cartitem_unit_weight";d:0;s:30:"cg_ecomm_cartitem_unit_price";N;s:27:"cg_ecomm_cartitem_summary";s:55:"Makové snění Platno - 20x30 (123.00) ";s:30:"cg_ecomm_cartitem_item_total";N;s:32:"cg_ecomm_cartitem_subscription";N;s:41:"cg_ecomm_cartitem_allow_quantity_adjust";b:1;}i:1;O:17:"cg_ecomm_cartitem":15:{s:26:"cg_ecomm_cartitem_source";s:8:"Products";s:30:"cg_ecomm_cartitem_product_id";i:5;s:23:"cg_ecomm_cartitem_sku";s:0:"";s:28:"cg_ecomm_cartitem_quantity";i:1;s:30:"cg_ecomm_cartitem_base_price";d:0;s:30:"cg_ecomm_cartitem_attributes";a:2:{i:0;O:8:"stdClass":5:{s:9:"attribset";i:7;s:8:"attrname";s:8:"Velikost";s:4:"name";s:5:"20x30";s:10:"adjustment";s:3:"100";s:3:"sku";s:4:"0511";}i:1;O:8:"stdClass":5:{s:9:"attribset";i:8;s:8:"attrname";s:3:"Typ";s:4:"name";s:10:"Fotopapír";s:10:"adjustment";s:2:"+0";s:3:"sku";s:4:"0521";}}s:24:"cg_ecomm_cartitem_type";i:1;s:29:"cg_ecomm_cartitem_estimated";b:0;s:27:"cg_ecomm_cartitem_pending";b:0;s:31:"cg_ecomm_cartitem_unit_weight";d:0;s:30:"cg_ecomm_cartitem_unit_price";N;s:27:"cg_ecomm_cartitem_summary";s:65:"Hejna racků 20x30 (100.00) Fotopapír  ";s:30:"cg_ecomm_cartitem_item_total";N;s:32:"cg_ecomm_cartitem_subscription";N;s:41:"cg_ecomm_cartitem_allow_quantity_adjust";b:1;}}
Z toho jsem zatím vyčetl, že to začíná vzorem x:x:{
kde v té závorce pro každý produkt platí, že: i:x;O:x:"cg_ecomm_cartitem":...
a product id najdu "cg_ecomm_cartitem_product_id";i:5

Tak teď, ještě s php stále začínam :) je tohle nějakeý zápis, který lze třeba zase převést na array a zpět (s kterou by se asi značně líp pracovalo) nebo cms s tím pracuje v této podobě? Pokud ano, tak nezbývá než pomocí nějakých string funkcí rozdělit na jednotlivé produkty, zkontrolovat jestli ten product_id je jeden z mých, určených a následně to spojit dohromady, bez těch částí s daným prod_id. Pak už jen base64_encode a vrátit do session není asi problém...

EDIT:
jak celý kód začína a:x, tak x označuje počet produktů v košíku, to celý bude opravdu nějakej textovej zápis arrays ne?
lapak
Forum Members
Forum Members
Posts: 33
Joined: Mon Sep 06, 2010 8:43 pm

Re: Smarty nebo UDT pro vymazání určitého produktu z košíku - Cart, Products, ...

Post by lapak »

tak a mam to hotovo :)

tak pro zuhlednění te proměnné stačila funkce unserialize() a pak už jsem měl mně známé array s Objekty jakožto jednotlivými produkty, takže finální UDT vypadá takto:


$id_postovneho == 7; //zadej id produktu postovne

$lin_items = unserialize(base64_decode($_SESSION[cgcart]));

$i = 0;
while ($i get_product_id() == $id_postovneho) {
  unset($lin_items[$i]);
};
$i++;
};

$lin_items = array_values($lin_items);

$lin_towrite = base64_encode(serialize($lin_items));

$_SESSION["cgcart"] = $lin_towrite;


Z košíku úspěšně vymaže produkt s daným id... Dík za pomoc chlapi
osxfil
Forum Members
Forum Members
Posts: 186
Joined: Wed Apr 01, 2009 6:03 pm

Re: Smarty nebo UDT pro vymazání určitého produktu z košíku - Cart, Products, ...

Post by osxfil »

No, spíš uznání tobě, že jsi na to přišel v podstatě sám :)
Post Reply

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