Přihlásit se

Košík - motivator k nákupu

13. lis 2018 12:28 #137639
Košík - motivator k nákupu od marvays
Uživatel
Ahoj.
Loni jsem řešil kus kodu, díky kterému by se mi měl na stránce detailu produktu zobrazovat text, který se mění v závislosti na tom, jakou hodnotu má zboží vložené do košíku. Díky některým z vás jsem to dal do kupy:
Code:
<div class="motivator" style="padding: 10px;position: absolute;width: 350px;right: 150px;bottom: -3px;padding: 10px;color: #e8102c;text-align: right;text-transform: none;"> <?php if ($data->billTotal == 0) { ?> <span style="animation: blinker 2s linear infinite;">Při objednávce nad 5000,- je doprava zdarma!</span> <?php } elseif ($data->billTotal < 5000) { ?> <span style="animation: blinker 2s linear infinite;">Chcete dopravu zdarma? Přidejte ještě zboží za: <?php echo (5000 - ($data->billTotal)) ?>,-</span> <?php } else { ?> <span style="font-weight: 700; color: #109d16;">Vaše objednávka bude dopravena zdarma!</span> <?php } ?> </div>

Tohle je kod pvo VM2 a umístěný je v modulu košíku.

Nyní řeším, že potřebuji tento kod zobrazovat v detailu produktu a ve VM3.
Kod jsem tedy vložil, ale nepřepočítává to . . . . jen zobrazí první volbu. Jelikož php je moje "jediná a nejslabší :)" stránka, tak nějak netuším, jestli je to tím, že je to umístěno mimo modul košíku, nebo tím, že je to v novější verzi VMka.

Mám takové tušení, že je to ta druhá možnost. A odhaduju že problém bude konkrétně v "$data->billTotal" . . . . poučíte mě prosím?

13. lis 2018 12:39 - 13. lis 2018 12:40 #137640
Odpověď od marvays
Uživatel
Tak potvrzeno, i Vmdebug si to myslí:
Code:
Notice: Undefined variable: data in /www/templates/astroid_template_zero/html/com_virtuemart/productdetails/default.php on line 257
Code:
<?php if ($data->billTotal == 0) { ?>

13. lis 2018 12:42 - 13. lis 2018 12:44 #137641
Odpověď od Ernst
Joomla Expert
mrknu na to, ale v jakém php souboru jsi ten kód měl?

neviděl jsem druhou zprávu, už chápu

13. lis 2018 14:09 - 13. lis 2018 14:22 #137643
Odpověď od Ernst
Joomla Expert
tak je to následně:

V novější verzi VM už není objekt $data, proto je třeba nahradit $data->billTotal proměnnou $this->cart->cartPrices[billTotal]

kód tedy bude:
Code:
<div class="motivator" style="padding: 10px;position: absolute;width: 350px;right: 150px;bottom: -3px;padding: 10px;color: #e8102c;text-align: right;text-transform: none;"> <?php if ($this->cart->cartPrices[billTotal] = 0) { ?> <span style="animation: blinker 2s linear infinite;">Při objednávce nad 5000,- je doprava zdarma!</span> <?php } elseif ($this->cart->cartPrices[billTotal] < 5000) { ?> <span style="animation: blinker 2s linear infinite;">Chcete dopravu zdarma? Přidejte ještě zboží za: <?php echo (5000 - ($this->cart->cartPrices[billTotal])) ?>,-</span> <?php } else { ?> <span style="font-weight: 700; color: #109d16;">Vaše objednávka bude dopravena zdarma!</span> <?php } ?> </div>

Tento kód je ale možné vložit to košíku, ne k detailu produktu.
Tuto možnost jsem nikde nenašel, opravdu jste tento kód měl v detailu produktu?

13. lis 2018 14:22 #137644
Odpověď od Rudolf
Joomla Expert
Na detailu produktu si určitě nevoláte model order, který voláte v košíku :)))))
Takže bych tipnul, že se tam musí vložit něco trochu jiného.

Můžete tedy hackovat nebo použít modul Free Shipping Info, který tohle kompletně řeší.

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
Přílohy:

13. lis 2018 14:53 #137647
Odpověď od Ernst
Joomla Expert
ještě jsem se na to díval a ten kód:
Code:
<div class="motivator" style="padding: 10px;position: absolute;width: 350px;right: 150px;bottom: -3px;padding: 10px;color: #e8102c;text-align: right;text-transform: none;"> <?php if ($data->billTotal == 0) { ?> <span style="animation: blinker 2s linear infinite;">Při objednávce nad 5000,- je doprava zdarma!</span> <?php } elseif ($data->billTotal < 5000) { ?> <span style="animation: blinker 2s linear infinite;">Chcete dopravu zdarma? Přidejte ještě zboží za: <?php echo (5000 - ($data->billTotal)) ?>,-</span> <?php } else { ?> <span style="font-weight: 700; color: #109d16;">Vaše objednávka bude dopravena zdarma!</span> <?php } ?> </div>

můžete použít v modulu košíku (v přepsání modulu)

to o čem píšu já výše, je košík v komponentě

15. lis 2018 22:28 - 15. lis 2018 22:31 #137722
Odpověď od Ernst
Joomla Expert
tak jsem se na vyžádání ještě podíval na ten kód do modulu košík:
Code:
<div class="motivator"> <?php if ($data->billTotal == 0) { ?> <span style="animation: blinker 2s linear infinite;">Při objednávce nad 5000,- je doprava zdarma!</span> <?php } elseif ($data->billTotal < 5000) { ?> <span style="animation: blinker 2s linear infinite;">Chcete dopravu zdarma? Přidejte ještě zboží za: <?php echo (5000 - ($data->billTotal)) ?>,-</span> <?php } else { ?> <span style="font-weight: 700; color: #109d16;">Vaše objednávka bude dopravena zdarma!</span> <?php } ?> </div>

kód je správně až na jedno ale:
$data->billTotal vrátí řetězec “Celkem 373,00 Kč”
To jistě chápeš, že nemůžeš porovnávat s numerickou hodnotou.
Takže pravdivě ti to vyhodnotí jen první podmínku, pokud je košík prázdný a řetězec je tudíž "" (prázdný)
Je tedy nutné ten řetězec převést na číslo, aby se to dalo porovnat. Je více možností jak to převést na číslo, ale problém by byl, pokud by tam byly oddělovače tisíců, to by se to dle formátu muselo ještě upravit. Jestli je oddělovač desetinných míst tečka nebo čárka je jedno.
Vidím dvě možnosti. Pokud chci opravdu vycházet z proměnné $data->billTotal:
Code:
$celkem=floatval(preg_replace(array("/[^0-9,.]/","/[.,]/"), array("","."), $data->billTotal))
nebo mohu použít proměnnou $data->billTotal_net. Tady ale neznám VM tak důkladně, abych mohl říct, že ty dvě proměnný vyjadřují vždy stejnou cenu.:
Code:
$celkem=floatval(str_replace(",",".",$data->billTotal_net))

takže celý kód bude vypadat například:
Code:
<div class="motivator"> <?php $celkem = floatval(preg_replace(array("/[^0-9,.]/","/[.,]/"), array("","."), $data->billTotal)) ?> <?php if ($celkem = 0) { ?> <span style="animation: blinker 2s linear infinite;">Při objednávce nad 5000,- je doprava zdarma!</span> <?php } elseif ($celkem < 5000) { ?> <span style="animation: blinker 2s linear infinite;">Chcete dopravu zdarma? Přidejte ještě zboží za: <?php echo (5000 - ($celkem)) ?>,-</span> <?php } else { ?> <span style="font-weight: 700; color: #109d16;">Vaše objednávka bude dopravena zdarma!</span> <?php } ?> </div>

16. lis 2018 00:16 #137726
Odpověď od Rudolf
Joomla Expert
Tož chlapi, celé to tak krásně píšete až je radost pohledět :)

ale zapomněli jste na to že změna ceny musí běžet ajaxem, jinak si to programujete jen pro programování a je to v reálném eshopu nepoužitelné.

Jak jsem psal, podíval bych se po modulu a komponentě Free Shipping info, která to má již vyřešené.

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

16. lis 2018 00:29 #137727
Odpověď od Ernst
Joomla Expert
a proč by to mělo běžet ajaxem, když zobrazení ceny v modulu košíku ajaxem neběží a stránka se po přidání zboží do košíku vždy znova načte?
My přeci cenu neměníme, jen k ní zobrazujeme info :ohmy:

16. lis 2018 00:35 #137728
Odpověď od Rudolf
Joomla Expert
Eshop s reload stránky po přidání produktu do košíku?

Aha, tak pokud máte tuto verzi chování eshopu.

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

16. lis 2018 00:40 #137729
Odpověď od Ernst
Joomla Expert
Ano, je to pro VM

16. lis 2018 01:16 #137730
Odpověď od Rudolf
Joomla Expert
Rozumím, tak to bude asi nějaká starší verze, já už 3 roky používám tyto věci ajaxové

- od té doby co je pro VM k dispozici ajaxový košík a ajaxová komponenta Free shipping info
- od té doby co to má alza a zákazníci to chtějí taky

Jinak mi vyhrožují jinými systémy :D

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

16. lis 2018 02:37 #137731
Odpověď od Cony
Moderátor

Rudolf Baláš napsal: - od té doby co to má alza a zákazníci to chtějí taky

Jinak mi vyhrožují jinými systémy :D


:cheer: Jéjej to znám - "Dyť to má alza (mall, facebook, google, amazon), to jen okopírujete" :P

16. lis 2018 04:27 - 16. lis 2018 04:29 #137732
Odpověď od Rudolf
Joomla Expert
Kdyby byl Max co k čemu a nevymýšlel již 3 roky přechod virtuemartu na wordpress, kde mu pšenka stejně nepokvete, tak to má v základu.

Ale nebuďte smutný, až rozjedeme portal minijoomla.org tak tam najdete všechny doplňky z portalu EasyJoomla.org v nové verzi a plus nové verze od nás včetně toho Free Shipping info.

Pak si to můžete koupit za mrzký peníz pokud to budete chtít :)

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

16. lis 2018 09:37 #137734
Odpověď od marvays
Uživatel

Ernst napsal: tak jsem se na vyžádání ještě podíval na ten kód do modulu košík:

takže celý kód bude vypadat například:

Code:
<div class="motivator"> <?php $celkem = floatval(preg_replace(array("/[^0-9,.]/","/[.,]/"), array("","."), $data->billTotal)) ?> <?php if ($celkem = 0) { ?> <span style="animation: blinker 2s linear infinite;">Při objednávce nad 5000,- je doprava zdarma!</span> <?php } elseif ($celkem < 5000) { ?> <span style="animation: blinker 2s linear infinite;">Chcete dopravu zdarma? Přidejte ještě zboží za: <?php echo (5000 - ($celkem)) ?>,-</span> <?php } else { ?> <span style="font-weight: 700; color: #109d16;">Vaše objednávka bude dopravena zdarma!</span> <?php } ?> </div>


Vyzkoušeno. posunuli jsme se hodně dopředu. Ale . . .

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,-

třetí podmínka vypadá dobře.

ajax by byl luxus, takhle musím pořešit, aby se mi nenačítal košík do cache.

Třetí podmínka funguje správně.

Powered by Fórum