Košík - motivator k nákupu
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:
<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ší

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?
Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.
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:
<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?
Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

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.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.
<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ě
Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.
<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:
$celkem=floatval(preg_replace(array("/[^0-9,.]/","/[.,]/"), array("","."), $data->billTotal))
$celkem=floatval(str_replace(",",".",$data->billTotal_net))
takže celý kód bude vypadat například:
<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>
Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

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.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.
Aha, tak pokud máte tuto verzi chování eshopu.
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.
Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.
- 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

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.
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.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.
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:
<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ě.
Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.