Košík Virtuemart - motivátor k nákupu - pro mírně pokročilé adminy

19.11.2018 00:00 584 zhlédnutí
Autor článku
Ernst
Článek uživatele

Eshop rozšíření Virtuemart zná asi většina z vás. Pro Virtuemart je k dispozici nespočet dalších rozšíření a šablon. Následující vychytávku si ale můžete vyzkoušet přidat sami, tedy pokud znáte alespoň minimální základy PHP a JS a umíte pracovat se soubory pomocí FTP.

Jistě znáte z různých eshopů, že se v modulu košíku zobrazuje informace, za kolik ještě musíte nakoupit, aby jste měli dopravu zdarma nebo dostali dárek atd. Virtuemart v košíku tuto funkci nemá a ani nevím, zda na to existuje nějaké rozšíření. Na následujícíh řádcích si popíšeme, jak košík ve Virtuemart o tuto funkci vylepšit.

Modul kosíku

1. Vytvořte si přepis modulu košíku v šabloně. Pokud nevíte jak, podívejte se na následující video. Tím se vám na webovém prostoru vytvoří soubor /templates/protostar/html/mod_virtuemart_cart/default.php. A nyní začneme s úpravou kódu. Kdo to umí udělá to jednoduše prostřednictvím FTP, kdo ne, může použít rozšíření pro Joomla Phoca Commander.

Doplňte si do kódu:

    <?php
    vmJsApi::removeJScript("/modules/mod_virtuemart_cart/assets/js/update_cart.js"); 
    vmJsApi::addJScript("/modules/mod_virtuemart_cart/assets/js/update_cart_new.js",false,false);
    JText::script('MYCART_PRIDEJ');
    JText::script('MYCART_NAD_5000');
    JText::script('MYCART_MENA');
    JText::script('MYCART_ZDARMA');
    $celkem = floatval(preg_replace(array("/[^0-9,.]/","/[.,]/"), array("","."), $data->billTotal));
if($data->totalProduct<=0) {$celkem=0;};?> <span class="motivator"> <?php if ($celkem <= 0.0001) { ?> <span class="zmenatextu" style="animation: blinker 2s linear infinite;"><?php echo JText::_( 'MYCART_NAD_5000'); ?></span> <?php } elseif ($celkem < 5000) { ?> <span class="zmenatextu" style="animation: blinker 2s linear infinite;"><?php echo JText::_( 'MYCART_PRIDEJ') .' '. (5000 - ($celkem)).' '.JText::_( 'MYCART_MENA') ?> </span> <?php } else { ?> <span class="zmenatextu" style="font-weight: 700; color: #109d16;"><?php echo JText::_( 'MYCART_ZDARMA'); ?></span> <?php } ?> </span>

do míst, kde to chcete zobrazit, většinou za tento řádek:

<a class="total" data-toggle="dropdown" href="#"><span class="hidden-xs totalcart"><?php if ($data->totalProduct and $show_price and $currencyDisplay->_priceConfig['salesPrice'][0]) { ?>
    <?php echo $data->billTotal; ?>
    <?php } ?></span></a>

ale těch prvních 6 řádek je lepší umístit hned na začátek souboru.

K vloženému kódu nekolik poznámek:

    vmJsApi::removeJScript("/modules/mod_virtuemart_cart/assets/js/update_cart.js");
    vmJsApi::addJScript("/modules/mod_virtuemart_cart/assets/js/update_cart_new.js",false,false);

zajistí, že se nepracuje s update_cart.js, ale s update_cart_new.js, který se nepřepíše. Za tento kód musím poděkovat Houbákovi. Navíc je můžete dát třeba do šablony /templates/protostar/html/mod_virtuemart_cart/ nebo někam do adresáře /media

Následující 4 řádky jsou tam kvůli použití těchto jazykových proměnných v JS. Dále už pokračuje jen výpočet a podmínky zobrazení. textu.

$data->billTotal totiž vrací řetězec "Celkem 516,00 Kč" a ten není samozřejmě  možné porovnávat s číslem. Proto je převeden na číslo typu float  - floatval(preg_replace(array("/[^0-9,.]/","/[.,]/"), array("","."), $data->billTotal)).

Ještě je vhodné se zmínit o podmínce  if ($celkem <= 0.0001) . Protože $celkem je typu float nelze napsat if ($celkem = 0) To je totiž vyhodnoceno jako nepravda, pokud je košík prázdný

2. V adresáři /modules/mod_virtuemart_cart/assets/js/ si vytvořte kopii souboru update_cart.js a nazvěte ji update_cart_new.js. 

Kopii pak upravte následovně:

                        $(module).find(".show_cart").html(		datas.cart_show);
			$(module).find(".total_products").html(	datas.totalProductTxt);
			$(module).find(".total").html(		datas.billTotal);
                        var hodnota = datas.billTotal;
                        var celkem = hodnota.replace(/[^0-9,.]/g,"");
                        celkem = celkem.replace(/[,.]/g,".");
                        if (celkem.length=0) {celkem=0} else {parseFloat(celkem);} 
if (datas.totalProduct<=0) {celkem=0}; if (celkem <= 0.0001) { mujtext = Joomla.JText._( 'MYCART_NAD_5000');} else if (celkem < 5000) { mujtext= (Joomla.JText._( 'MYCART_PRIDEJ') + ' ' + (5000 - celkem) + ' ' + Joomla.JText._( 'MYCART_MENA'));} else { mujtext= ( Joomla.JText._( 'MYCART_ZDARMA'));} $(module).find(".zmenatextu").html(mujtext);

Je jasné že, podmínky musí být stejné jako v defailt.php, tedy pokud je chcete změnit, musíte na obou místech. Snad ještě k podmínce if (celkem.length=0) {celkem=0} else {parseFloat(celkem);}. Ta zde musí být, protože pokud je košík prázdný není v datas.billTotal prázdný řetězec, ale N/A.  

3. Doplňte do /language/overrides/cs-CZ.override.ini a en-GB.override.ini. Opravdu musíte do obojícho, pokud si chcete být jisti, že v jiném jazyku se nezobrazí jen jazykové řetězce. V angličtině to samozřejmě můžete. Je to takto míněno pro vícejazyčný web ne pro multiměnový VM.

MYCART_ZDARMA="Vaše objednávka bude dopravena zdarma!"
MYCART_MENA="Kč"
MYCART_PRIDEJ="Chcete dopravu zdarma? Přidejte ještě zboží za:"
MYCART_NAD_5000="Při objednávce nad 5000,- je doprava zdarma!"

Texty si samozřejmě zadejte dle sebe a případně i v dalších jazykových mutacích. Tímto je řešení konečné a univerzální, odolné vůči upgradům.

Úprava je úspěšně otestována s rozšířením (One Page Checkout pro Virtuemart)  OPC.

Funkčnost tohoto kódu si můžete vyzkoušet na testovacím webu. Je tam nainstalována joomla 3.9.0. virtuemart 3.4.2. a poslední verze OPC.

Závěrem:

Pokud vám všímavějším není jasné, proč tam jsou podmínky if($data->totalProduct<=0) {$celkem=0;}; (PHP) a if (datas.totalProduct<=0) {celkem=0}; (JS), tak je to proto, že tam má VM chybu.

Pokud se totiž vyprázdní košík, tak v $data->billTotal zustane řetězec "Celkem 80,00 Kč". Tedy tolik, kolik činí doprava a zobrazovalo by to nesmysly.

Pokud máte OPC, tak ten tu chybu opravuje, ale pokud ne, musíte tam ty podmínky mít.

Informace o autorovi Ernst

Líbil se vám článek?
(8 hlasů)
práce se soubory bez ftp přístupu
Následujicí článek autora Ernst  19.11.2018 584 6
VIDEO: Práce se soubory na webu pro začátečníky
Článek uživatele
Tento článek je určen těm, kdo neznají protokol FTP nebo neznají přihlašovací údaje pro FTP na...

Štítky: Návod Virtuemart

22.02.2019 03:25 54 zhlédnutí
Začínáme s Joomla!
Styly pro úplné začátečníky
Styly pro úplné začátečníky

Tento článek je určen pro ty, kteří umí ovlivnit vzhled webu pouze nastavením v administraci webu....

22.12.2018 05:50 339 zhlédnutí
Vývojářské tipy
Jednostránková pokladna ve Virtuemart - OPC
Jednostránková pokladna ve Virtuemart - OPC

Ti z vás, jenž vytváříte eshop pomocí komponenty Virtuemart, se stále setkáváte s požadavkem...

22.11.2018 13:19 504 zhlédnutí
Začínáme s Joomla!
VIDEO: Práce se soubory na webu pro začátečníky
VIDEO: Práce se soubory na webu pro začátečníky

Tento článek je určen těm, kdo neznají protokol FTP nebo neznají přihlašovací údaje pro FTP na...

19.11.2018 09:56 585 zhlédnutí
Vývojářské tipy
Košík Virtuemart - motivátor k nákupu - pro mírně pokročilé adminy
Košík Virtuemart - motivátor k nákupu - pro mírně pokročilé adminy

Eshop rozšíření Virtuemart zná asi většina z vás. Pro Virtuemart je k dispozici nespočet dalších...

6 komentáře

Petra - STAWEBNICE.com
napsal(a) Petra - STAWEBNICE.com 19. lis 2018 15:09

Ahoj,
vložila jsem zboží do košíku na tom demu, ale neukazuje se mi nic o tom, za kolik mám ještě nakoupit, abych měla dopravu zdarma.

Jinak já na toto používám Plugin Pro Shipment od Valerie https://www.alatak.net/en/extensions/virtuemart/shipments/pro-shipment-plugin.html

V praxi to funguje tak, že to dopočítává, za kolik je třeba ještě nakoupit, v praxi k vidění třeba na eshopu https://www.zvykacky-shop.cz/

Dala bych do článku screenshot, aby si to lidi uměli lépe představit. Hodím pak na blog návod, jak to nastavit, má to víc možností, a umožňuje různě opodmínkovat dopravu nad rámec standardních možností Virtuemartu.

Odkaz Komentáře
Ernst
napsal(a) Ernst 19. lis 2018 15:25

Ahoj, to o čem píšeš, je košík v komponentě, to tady neřešíme, přestože to je mnohem jednoduší to upravit, psal jsem to v diskuzi https://www.joomlaportal.cz/forum/71-joomla-3-0-x-3-1-x-3-2-x-a-jeji-rozsireni/122334-kosik-motivator-k-nakupu.
Takže to tvoje navrhovaní rozšíření to neumí zobrazit v modulu košíku. Na demo webu je to modul "nákupní košík" v pravém sloupci.
Když přidám zboží napíše to tam třeba:
Celkem 505,90 Kč Chcete dopravu zdarma? Přidejte ještě zboží za: 4494.1 Kč
Je to řešený jak ajaxem tak php.

Odkaz Komentáře
Petra - STAWEBNICE.com
napsal(a) Petra - STAWEBNICE.com 19. lis 2018 15:53

Vidíš! A to je přesně ten důvod, proč by to chtělo do toho článku vložit screenshot. To info o tom, že je to v minicartu jsem úplně přehlédla.

Odkaz Komentáře
Ernst
napsal(a) Ernst 19. lis 2018 16:05

Poslal jsem to Františkovi, aby to tam přidal.

Odkaz Komentáře
Rudolf Baláš
napsal(a) Rudolf Baláš 21. lis 2018 05:54

Technická:

Z marketingového hlediska jedna malá věta v modulu košík, když si přidávám produkt na výpisu kategorie nebo detailu produktu a modul košík nevidím nemá žádný smysl a o tom že něco musím ještě koupit nebo mám něco zadarmo se dozvím náhodou po odrolování nahoru, kdy už úplně zapomenu co jsem koupil :)

Proto nejvhodnější vložení této informace je do popup okna - padded.php nebo umístit modul nad výpisem produktů nebo nad detail produktu nebo nad košík (když měním jen počty ks v one page košíku).

Tím nechci snižovat super odvedenou práci :)

Odkaz Komentáře
Ernst
napsal(a) Ernst 21. lis 2018 10:47

Máš pravdu Rudo, ale je ještě jedna možnost, dát ten modul fixed.
Udělal jsem to teď tak na tom demowebu a vypadá to dobře.

Odkaz Komentáře

Nové články

Článek uživatele
Začínáme s Joomla!
Styly pro úplné začátečníky
Článek uživatele
Začínáme s Joomla!
Jak vkládat videa do článků v Joomla!

Související články