Zencart - ikonka dopravy zdarma automaticky
Vydáno: 8.05.08 Kategorie: zencart
Protože občas pro mé klienty využívám free e-shop Zencart, rozhodl jsem publikovat některé mé programátorské kódy, které nejsou standardně v Zencartu k dispozici a Vám by mohli ulehčit práci, a v případě potřeby budu vědět i já kde je najdu :)
Dnes Vám tedy ukážu, jak je možné automaticky zobrazit u produktu ikonku doprava zdarma. Automaticky znamená, že se zobrazí u každého produktu, jenž má cenu (případně je-li nastavena sleva, tak cenu se slevou) vyšší, než je cena stanovena v adminitraci Zencartu u modulů dopravy (Doprava zdarma – možnosti – a řádek Total – Free Shipping when Total >=). Pro úplnost připomínám, že cena se počítá včetně DPH.
Nejprve si vytvořte ikonku dopravy zdarma, případně nechte standardní obrázek, jenž je již v zencartu. Pokud jste si vytvořili vlastní, pojmenujte obrázek always-free-shipping.gif a nahrejte na web do složky /includes/templates/vas-template/images/
Najděte si soubor tpl_product_info_display.php který je ve složce /includes/templates/vas-template/templates/ a na místo, kde chcete ikonku dopravy zdarma zobrazit vložte:
<!--bof doprava zdarma pokud je výrobek dražší než určená cena -->
<?php
/**
* Copyright Bc. Ivo Toman - www.ivorius.com
* Dne 8. 5. 2008
* Vydáno k volnému použití, nikoliv však veřejnému publikování
*/
//Zjistím od kolika je doprava zdarma
$dop = $db->Execute("select configuration_value from " . TABLE_CONFIGURATION . " where configuration_key = 'MODULE_SHIPPING_FREEOPTIONS_TOTAL_MIN'");
// Pokud cena za dopravu existuje a je vyšší než 0
if($dop->fields['configuration_value'] > 0) {
define("DOPRAVA_ZDARMA_OD", $dop->fields['configuration_value']);
//dotaz do DB na cenu, slevu, daň
$zbozi = $db->Execute("select p.products_price, s.specials_new_products_price, t.tax_rate from " . TABLE_PRODUCTS . " p LEFT JOIN " . TABLE_SPECIALS . " s ON (p.products_id = s.products_id) JOIN " . TABLE_TAX_RATES . " t ON (p.products_tax_class_id = t.tax_class_id) where p.products_id = '" . (int)$_GET['products_id'] . "'");
//vypočet daňového koeficientu
$dan = (100+$zbozi->fields['tax_rate'])/100;
//Pokud (slevněná cena produktu je nižší než nutná cena k dopravě zdarma a zároveň sleva existuje) NEBO cena produktu je nižší než nutná cena
if ((($dan*$zbozi->fields['specials_new_products_price'] < DOPRAVA_ZDARMA_OD) AND ($zbozi->fields['specials_new_products_price'])) OR ($dan*$zbozi->fields['products_price'] < DOPRAVA_ZDARMA_OD)) {
//tak nic nedělej
} else {
//jinak zobraz ikonku dopravy zdarma
echo TEXT_PRODUCT_FREE_SHIPPING_ICON;
}
}
?>
<!--eof doprava zdarma -->
No a to je vše. Pokud by Vám nevyhovovala nutná cena stanovená v administraci, můžete skript upravit změnou konstanty:
define("DOPRAVA_ZDARMA_OD", XXX);
kde za XXX doplníte vlastní hodnotu.
Petr · 2 06 2008 - 11:57
No a pak se nadává jak je Zencart náročnej na databázi, když se člověk na každou ptákovinu zbytečně znova ptá ;-)
Zkus si schválně vypsat co už má samotný Zencart definováno v MODULE_ORDER_TOTAL_SHIPPING_FREE_SHIPPING_OVER.
A aktuální cenu konkrétního produktu (včetně případné slevy nebo i nejnižší ceny pokud máš nadefinováno víc atributů) zjistíš třeba takhle – zen_get_products_actual_price($listing->fields[‚products_id‘])
Ivo · 2 06 2008 - 12:10
Díky za informace, zkusím se na to podívat. Je pravda, že se mi nepodařilo tohle dohledat, takže jsem byl nucen si to vytáhnout z DB sám.