Zencart - ikonka dopravy zdarma automaticky

Vydáno: 8.05.08 Kategorie:

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/tem­plates/vas-template/images/

Najděte si soubor tpl_product_in­fo_display.php který je ve složce /includes/tem­plates/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.

Komentáře

  1. Petr · 2 06 2008 - 11:57

    # 1

    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_TO­TAL_SHIPPING_FRE­E_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_produc­ts_actual_pri­ce($listing->fields[‚produc­ts_id‘])

  2. Ivo · 2 06 2008 - 12:10

    # 2

    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.



Přidat komentář








Formát Texy