Košík - motivator k nákupu

Odpověď od marvays
16. lis 2018 09:41 #137735

Rudolf Baláš napsal: a ajaxová komponenta Free shipping info


Máte link na tu komponentu? Na forek VMnet mi toho vyskakuje mraky a vždy se to tváří jako balík něčeho. nepoznám, kterou máte na mysli.

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Ernst
16. lis 2018 09:58 #137736
Ahoj Rudo, máš pravdu, pokud je v konfiguraci vm zapanutý ajaxový košík, tak se to bude chovat špatně (zaktualizuje se cena a ne ten text).
Já si tu možnost ajaxu v košíku neuvědomil.

musí se do default.php v přepisu košíku v šablone doplnit js, který ten text taky aktualizuje.

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Ernst
16. lis 2018 11:32 #137740
Marvays napsal

hned na startu to přeskočí první podmínku. i když jsem změnil podmínku na ==0 tak ji přeskočí a zobrazí podmínku druhou. Tuhle dopdmínku to ale počítá zvláštně. Pokud mám prázdný košík, tak bych měl mít výzvu na přidání do košíku za 5000,-. Místo toho mi to počítá na 4905 a někde se nám zatoulalo 95 kaček. Možná by pomohlo změnit druhou podmínku na větší než 0 a menší než 5000,-

sorry jako, ta podmínka musí být <?php if ($celkem <= 0) { ?> místo <?php if ($celkem = 0) { ?> , to jsem přehlédl. Musí to tak být, protože $celkem je typu float.

Ten ajax není zas tak složitý uvede variantu pro něj, která bude fungovat i při vypnutém ajax, takže pro obojí jedno řešení.

musí se změnit /modules/mod_virtuemart_cart/assets/js/update_cart.js.
ten ale není chráněn při upgrade VM, takže by jsi ho musel znovu měnit po každém upgrade.
Nejsem v JS tak zběhlý, abych věděl jak js umístit do souboru default.php v přepisu modulu košíku v šabloně.

Pokud mi zde někdo poradí, budu velmi rád.

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

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

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Ernst
16. lis 2018 15:17 #137752
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

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

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

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? :)

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Ernst
16. lis 2018 19:39 - 16. lis 2018 19:41 #137759
tak takhle:
1. do přepisu modulu košíku v šabloně - /templates/xxxxxx/html/mod_virtuemart_cart/default.php si doplnit
    <?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
<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
                        $(module).find(".show_cart").html(		datas.cart_show);
			$(module).find(".total_products").html(	datas.totalProductTxt);
			$(module).find(".total").html(		datas.billTotal);
                        $(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.

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

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

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.

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Ernst
16. lis 2018 21:06 - 16. lis 2018 21:08 #137761
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:

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Ernst
17. lis 2018 00:24 - 17. lis 2018 00:26 #137764
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
    <?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
    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:
                        $(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
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.

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Rudolf
17. lis 2018 01:59 #137766
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.org - 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

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od marvays
17. lis 2018 03:29 #137768
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í.

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

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

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

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

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

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

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

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

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.