Přihlásit se

Košík - motivator k nákupu

16. lis 2018 13:29 #137746
Odpověď od marvays
Uživatel
Už to počítá správně, je to blbne při prázdném košíku.
[img

16. lis 2018 15:17 #137752
Odpověď od Ernst
Joomla Expert
Já už to předělal i pro ten ajax a některé chyby jsem při testu opravil.
Ještě to otestuji a pak zde uveřejním, asi večer

16. lis 2018 15:43 #137754
Odpověď od marvays
Uživatel

Ernst napsal: Já už to předělal i pro ten ajax a některé chyby jsem při testu opravil.
Ještě to otestuji a pak zde uveřejním, asi večer


To abych ti večer klepnul husu. Nebo raději králíka? :)

16. lis 2018 19:39 - 16. lis 2018 19:41 #137759
Odpověď od Ernst
Joomla Expert
tak takhle:
1. do přepisu modulu košíku v šabloně - /templates/xxxxxx/html/mod_virtuemart_cart/default.php si doplnit
Code:
<?php $celkem = floatval(preg_replace(array("/[^0-9,.]/","/[.,]/"), array("","."), $data->billTotal)); ?> <span class="motivator"> <?php if ($celkem <= 0.0001) { ?> <span class="zmenatextu" style="animation: blinker 2s linear infinite;">Při objednávce nad 5000,- je doprava zdarma!</span> <?php } elseif ($celkem < 5000) { ?> <span class="zmenatextu" style="animation: blinker 2s linear infinite;">Chcete dopravu zdarma? Přidejte ještě zboží za: <?php echo (5000 - ($celkem)) ?> Kč</span> <?php } else { ?> <span class="zmenatextu" style="font-weight: 700; color: #109d16;">Vaše objednávka bude dopravena zdarma!</span> <?php } ?> </span>
do míst, kde to chcete zobrazit, většinou za
Code:
<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>

pak do /modules/mod_virtuemart_cart/assets/js/update_cart.js
dát místo
Code:
$(module).find(".show_cart").html( datas.cart_show); $(module).find(".total_products").html( datas.totalProductTxt); $(module).find(".total").html( datas.billTotal);
Code:
$(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 (celkem <= 0.0001) { mujtext='Při objednávce nad 5000,- je doprava zdarma!';} else if (celkem < 5000) { mujtext= ('Chcete dopravu zdarma? Přidejte ještě zboží za: ' + (5000 - celkem) + ' Kč');} else { mujtext= ( 'Vaše objednávka bude dopravena zdarma!');} $(module).find(".zmenatextu").html(mujtext);
nevýhodou je, že změny v /modules/mod_virtuemart_cart/assets/js/update_cart.js se přepíšou při reinstalaci nebo upgrade. Proto pak musíte změnit ten kód znovu.
Možná někdo ví jak to udělat jinak, aby se ten js doplnil do /templates/xxxxxx/html/mod_virtuemart_cart/default.php, já bohužel ne, a uvítam každou radu, jestli to jde.

Také by se ještě měly ty texty "natvrdo" dát do jazykových proměnných.

16. lis 2018 20:04 #137760
Odpověď od marvays
Uživatel

Ernst napsal: tak takhle:
nevýhodou je, že změny v /modules/mod_virtuemart_cart/assets/js/update_cart.js se přepíšou při reinstalaci nebo upgrade.


No, já na VMko už několik let používám template od Flexiblewebdesign. Sice drahá záležitost, ale mi se líbí. Ti dělají aktualizaci jednou za půl roku a to jen když se vyskytně nějaký konflikt s novou verzí VM. Košík mají řešený vlastním modulem. Takže kod vložim do flexible_update_cart.js a můžu aktualizovat VMko jak chcu :)

Hned ráno to zkusím vložit na web a dám vědět.

16. lis 2018 21:06 - 16. lis 2018 21:08 #137761
Odpověď od Ernst
Joomla Expert
deju vědět, já to tedy testoval, ale kdyby něco.

na vlastním modulu a js šablony jsem to testovat nemohl, tak si to v nejhorším uprav

PS huse a králíkovi dej milost :lol:

17. lis 2018 00:24 - 17. lis 2018 00:26 #137764
Odpověď od Ernst
Joomla Expert
Ještě jsem se hecnul a udělal to i těmi jazykovými proměnnými. A navíc díky Houbákovi to je udělaný tak, že se po upgrade nebo reinstalaci virtuemart nemusí nic opravovat.

/templates/xxxxxx/html/mod_virtuemart_cart/default.php si doplnit
Code:
<?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)); ?> <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>
Kód
Code:
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.
Navíc ji můžete dát třeba do šablony /templates/xxxxxx/html/mod_virtuemart_cart/ nebo někam do /media

V /modules/mod_virtuemart_cart/assets/js/ si vytvořte kopii update_cart.js a nazvěte ji update_cart_new.js.
Tu pak upravte:
Code:
$(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 (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ště si doplňte do /ernst2.8u.cz/web/language/overrides/cs-CZ.override.ini a en-GB.override.ini
Code:
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ím to je řešení konečné a univerzální, odolné vůči upgradům.

17. lis 2018 01:59 #137766
Odpověď od Rudolf
Joomla Expert
Tak vidíte, konečně to začíná mít hlavu a patu :)

Co se týká komponenty a modulu, vycházeli jsme od konceptu firmy idealconception.com pro J1.5 a 2.5, bohužel tento web již není dostupný. Ve verzi pro J1.5 to bylo bez ajaxu, ve verzi pro J25 to již obsahovalo Ajax.

Každopádně to řešení jsme přeprogramovali do J3 a zůstalo nám.

A máte to hezky vyřešené, ještě vám chybí administrace pro nastavení jazykových konstant pro každý jazyk (language file Vám nepomůže, u multijazyčného a multiměnového eshopu musíte zajistit závislost země, jazyku a měny, která ve VM není)

Prostě máte pochvalu a pro první a pro použití natvrdo to stačí.
Pro automatické nasazování na eshopy to chce dopilovat, odladit v případě že používáte OPC a je třeba vyřešit konflikty v ajaxu s OPC a další, ale už jenom drobné úpravy :)


Řeknu Václavovi, že mu tady vzniká konkurence v programování :)

MiniJoomla! - www.minijoomla.cz - eshop s rozšířením Joomla/VM
Email Manager - aplikace na správu šablon emailů pro VirtueMart
Easy Feeder - aplikace na generování XML/CSV feedů a napojení na ERP pro VM
PragueClassicconcert - portál pro prodej vstupenek na systému Joomla

17. lis 2018 03:29 #137768
Odpověď od marvays
Uživatel
Tak jsem to nainstaloval. Nejsem si jistý, jestli to funguje přesně tak, jak si zamýšlel. Hodim ti do mailu odkaz na vyzkoušení.

17. lis 2018 10:04 - 18. lis 2018 20:14 #137770
Odpověď od Ernst
Joomla Expert

Rudolf Baláš napsal: Tak vidíte, konečně to začíná mít hlavu a patu :)

Prostě máte pochvalu a pro první a pro použití natvrdo to stačí.
Pro automatické nasazování na eshopy to chce dopilovat, odladit v případě že používáte OPC a je třeba vyřešit konflikty v ajaxu s OPC a další, ale už jenom drobné úpravy :)

Řeknu Václavovi, že mu tady vzniká konkurence v programování :)

Díky za pochvalu, ale konkurence nikomu nevzniká v js jsem spíše začátečník.

S OPC to běhá a nemá to žádný konflikt, testoval jsem.

A máte to hezky vyřešené, ještě vám chybí administrace pro nastavení jazykových konstant pro každý jazyk (language file Vám nepomůže, u multijazyčného a multiměnového eshopu musíte zajistit závislost země, jazyku a měny, která ve VM není)

To je mi jasný, ale v týhle fázi to řešit nechci. Je to míněno pro vícejazyčný web ne pro multiměnový VM.

Měním teď prochu program a prvně napíšu článek o motivátoru, pak o CSS :)
Pokud má někdo zájem, hodil jsem řešení na jeden svůj testovací web, pozor není eshop nijak stylizován a doladěn, je to jen pro ilustraci toho košíku - vmmotivator.8u.cz/index.php/eshop
Poděkovali: Linelabcz

18. lis 2018 10:01 #137774
Odpověď od Linelabcz
Admin
Díky za skvělý článek Ernste a návod, jak přidat zajímavou funkci do Virtuemart. :)

18. lis 2018 15:55 - 18. lis 2018 15:55 #137780
Odpověď od Ernst
Joomla Expert
mám prosbu na admina. Pro testování je to teď na vmmotivator.8u.cz/index.php/eshop

můžeš mi to v tom předchozím příspěvku změnit?

18. lis 2018 16:06 #137781
Odpověď od Linelabcz
Admin
Samžu ten link úplně, co ty na to? Do článku odkazy na testovací weby nepatří. Protože testovací weby jsou dočasné.

18. lis 2018 16:18 #137783
Odpověď od Ernst
Joomla Expert
tenhle druhý odkaz tam klidně nech, ten bude stálý, nechám ho napořád (je i v článku)

30. říj 2023 15:50 #148794
Odpověď od marvays
Uživatel
Potřeboval jsem zobrazit tento motivátor mimo modul košíku ve VirtueMart 3.8.9 10473
Kdyby někdo potřeboval, může vyzkoušet.
Code:
<?php // no direct access defined('_JEXEC') or die; // Získání přístupu k VirtueMart if (!class_exists('VmConfig')) {     require(JPATH_ADMINISTRATOR . '/components/com_virtuemart/helpers/config.php'); } if (!class_exists('VmModel')) {     require(JPATH_ROOT . '/administrator/components/com_virtuemart/helpers/vmmodel.php'); } // Získání instance VirtueMart košíku $cart = VirtueMartCart::getCart(); // Získání celkové hodnoty produktů v košíku $totalValue = $cart->cartPrices['salesPrice']; // Zaokrouhlíme hodnotu bez desetiných míst $roundedValue = round($totalValue, 0); ?> <div style="font-weight: 300; font-size: 18px; font-family: Alegreya, Verdana; color: #3a3a3a;"> <?php if ($roundedValue == 0) { ?> <span style="animation: blink 3s linear infinite; color: #fff;">Při objednávce nad 5000,- Vám ji doručíme zdarma!</span> <?php } elseif ($roundedValue < 5000) { ?> <span class="motivator-kosik-mobil-chcete" style="color: #fff; font-weight: 700;">Chcete dopravu zdarma? </span><span style="animation: blink 4s ease-in-out infinite; color: #fff;">Přidejte ještě zboží za: <?php echo (5000 - $roundedValue) ?>,-</span> <?php } else { ?> <span style="color: #fff; font-weight: 700;">Gratulujeme! Objednávka Vám bude doručena zcela zdarma!</span> <?php } ?> </div>

Upozorňuji, že nejsem PHP a JS programátor. Věnuji především grafice a SEO. Kód byl psán pro účely konkrétní stránky, proto jsem kvůli jednoduchosti css styly napsal přímo do kódu. Stejně tak zobrazované texty. Některým PHP a JS programátorům může pohled na tento kód vyvolat zvracení :)

Powered by Fórum