Platební brána GoPay je poměrně oblíbená a pou?ívá ji hodně zákazníků hostujícich na Prestahost . GoPay nabízí modul pro Prestashop ale kupodivu je?tě nezjistil existenci verze 1.5 a tak na ní modul nefunguje. Na?těstí lze modul koupit na internetu a tím jsem také donedávna vyřizoval v?echny dotazy. Tento týden jsem spí?e náhodou otestoval zda neplacený modul nefunguje také na verzi 1.5 - a opravdu funkční nebyl. Nicméně mě to nedalo abych se nepodíval do logů, co se tedy modulu nelíbí .... a překvapivě chyba vznikla zcela mimo modul, při pokusu odeslat email v místech kde byla vy?adováno vytvoření odkazu. Pak ji? stačilo jen pár minut strávených s Google: Call to a member function getPageLink() on a non-object .
Jedná se o problém který trápí i jiné platební moduly a lze jej vyře?it velmi snadno, dopsáním několika řádek kodu. Rozhodl jsem se nevystavit upravený modul ke sta?ení jako celek, důvodů je několik, například ten ?e je to spí?e jen patch ne? skutečný upgrade. Nicméně takto upravený GoPay modul na prestashop 1.5 funguje.
Konkrétní oprava modulu GoPay pro Prestashop 1.5:
otevřte si v textovém editoru typu Notepad soubor gopay.php a upravte jeho metodu __construct takto (změny vyznačeny tučně):
public function __construct()
{
$this->name = 'gopay';
$this->tab = 'payments_gateways';
$this->version = '1.9';
$this->currencies = true;
$this->currencies_mode = 'radio';
parent::__construct();
$this->page = basename(__FILE__, '.php');
$this->displayName = $this->l('GoPay');
$this->description = $this->l('Platí GoPay');
$this->confirmUninstall = $this->l('Opravdu chcete smazat platební modul GoPay?');
if (empty(Context::getContext()->link))
Context::getContext()->link = new Link();
}
Prestashop 1.4 byl a je slu?ný eshop, ale vůči verzi 1.5 je to přece jen chudý příbuzný. Tvorba cen a slev, mobilní téma, multistore, sklady ... cokoliv z toho mů?e být dostačujícím důvodem pro upgrade.
Jak tedy na upgrade prestashopu?
První mo?ností která se nabízí je vestavěný autoupgrade modul, který je ve verzi 1.5 opravdu propracovaný a snadno umo?ní přechod mezi subverzemi 1.5. Podle dokumentace je pou?itelný i pro přechod z verze 1.4 na 1.5. Nicméně jak je konstatováno v manuálu "Sadly, not all upgrades are successful" a četné stí?nosti u?ivatelů nasvědčují ?e tomu tak opravdu je. Osobně pou?ívám metodu ručního reimportu produktů zalo?enou na mém modulu CSV export/import. Postup je poměrně spolehlivý a lze jej pou?ít i pro přechod z verzí Prestashop 1.2 a 1.3. Pokud ale pou?íváte kombinace zbo?í a nemáte trochu více ne? bě?né znalosti práce s počítačem, nejspí?e neuspějete. V ka?dém případě pracujte se dvěma oddělenými eshopy - původním "ostrém" a novém "cvičném" do kterého data přená?íte.
Nejprve vyře?te ?ablonu
?ablona z 1.4 na nové Prestě fungovat nebude. Nemá ani valný smysl pokou?et se ji upravit systémem dílčích změn. Dokumentace doporučuje začít z čisté výchozí ?ablony pro 1.5 a změny do ní zapracovat znovu. I v praxi jsem se přesvědčil ?e je to druhé nejlep?í ře?ení. První nejlep?í ře?ení je zakoupit nějakou hotovou moderní a případně i responsivní ?ablonu pro 1.5. Dal?ím omezením jsou úpravy eshopu dělané na míru o které při update buď přijdete nebo nebudou fungovat, ale to zde nebudu rozebírat.
Modul CSV export/import
1. Stáhněte si modul Prestashop CSV export/import ve verzi upravené pro import do 1.5. K modulu je přilo?en celkem podrobný manuál. Nainstalujte modul na původní eshop a vyexportujte CSV soubory pro zbo?í, adresy, zákazníky, výrobce, dodavatele a kategorie.
2. Na novém eshopu budete potřebovat obrázky produktů ze starého eshopu. Nejjednodu??í je překopírovat celý adresář "/img/p" do "upload/p". Pokud ale pou?íváte nový systém ukládání obrázků, bude potřeba do cílového adresáře ručně překopírovat v?echny výchozí obrázky, poznáte je podle toho ?e jejich jméno sestává jen z čísel oddělených pomlčkou a koncovky.
Vlastní import
Kategorie
na novén eshopu se přihla?te do phpMyAdmin a proveďte dotazy:
DELETE from ps_category WHERE id_category > 2;
DELETE from ps_category_lang WHERE id_category > 2;
DELETE from ps_category_group WHERE id_category > 2;
DELETE from ps_category_shop WHERE id_category > 2;
DELETE from ps_category_product WHERE 1;
Nyní nahrajte soubor category.csv přes funkci Pokročilé nastavení - Import z CSV - Nahrát. Pak soubor vyberte a zaklikněte volbu
Vynutit v?echna ID. Klikněte na "Dal?í krok" a do políčka vynechat řádků napi?te 2, aby se přeskočilo textové záhlaví sloupců a kategorie Home kterou jsme ponechali nesmazanou.
Po dokončení importu je potřeba upravit rodiče opět v phpMyAdmin
UPDATE ps_category SET id_parent=2 WHERE id_parent=1 AND id_category > 2;
UPDATE ps_category SET level_depth=(level_depth+1) WHERE id_category > 2;
Nakonec je je?tě potřeba asi Presta přepočítala strom kategorií. Nejjednodu?eji toho lze docílit přidáním, ulo?ením a opětovným vymazáním libovolné kategorie v administraci.
Dodavatelé a výrobci
Lze snadno nahrát z supplier.csv a manufacturer.csv s volbami Vynutit v?echan ID a Smazat původní před importem. Ve druhém kroku pochopitelně vynecháme první řádek aby se přeskočily textové popisky sloupců.
Adresy a zákazníci
Opět je nutné vynutit ID a smazat původní adresy či zákazníky. Navíc zále?í na pořadí, první se nahrávají zákazníci. Dal?í komplikací je chybějící id_customer v adresách, díky čemu? se posune pořadí sloupců, proto je potřeba téměř v?echny sloupce nastavit ručně ve druhém kroku.
Produkty
Produkty jsou často ve více souborech, které je potřeba nahrát postupně. Staré produkty sma?te jen při nahrávání prvního souboru, naopak ID je potřeba vynutit v?dy. Vět?ina sloupců souhlasí, ale minimálně sloupec s cestami obrázků je potřeba nastavit.
Kombinace
A? dosud byl postup poměrně jednoduchý a nepotřebovali jsme ani ?ádné zvlá?tní prostředky. Nicméně modul CSV Improt/Export kombinace neumí a k jejich přenesení je téměř nezbytné mít nějaký nástroj pro práci s databází. Pou?ívám Navicat, který umí mj. porovnat tabulky a vygenerovat příkazy pro úpravu jejich struktury
a) porovnejte strukturu tabulek směrem nový eshop - starý eshop, vygenerujte a ulo?te skript pro její synchronizaci. Týká se to jen tabulek souvisejích s attributy, viz dále.
b) přeneste kompletně tabulky i data ze starého eshopu na nový. Nově přenesené tabulky pochopitelně nemají správnou strukturu, ale k domu dojdeme později. Jedná se o tabulky
ps_attribute
ps_attribute_group
ps_attribute_group_lang
ps_attribute_impact
ps_attribute_lang
ps_feature
ps_feature_lang
ps_feature_product
ps_feature_value
ps_feature_value_lang
ps_product_attribute
ps_product_attribute_combination
ps_product_attribute_image
c) ulo?eným synchronizačním skriptem opravte databázi na novém eshopu. Toto se bude v?dy li?it podle konkrétních verzí. Opravdu potřebujete svůj skript, následující by nemusel fungovat v lep?ím případě vůbec, v hor?ím by se mohla zavléci skrytá chyba
ALTER TABLE `ps_attribute` ADD COLUMN `position` int(10) unsigned NOT NULL DEFAULT '0';
ALTER TABLE `ps_attribute_group` ADD COLUMN `group_type` enum('select','radio','color') NOT NULL DEFAULT 'select';
ALTER TABLE `ps_attribute_group` ADD COLUMN `position` int(10) unsigned NOT NULL DEFAULT '0';
ALTER TABLE `ps_attribute_impact` MODIFY COLUMN `weight` decimal(20,6) NOT NULL;
ALTER TABLE `ps_feature` ADD COLUMN `position` int(10) unsigned NOT NULL DEFAULT '0';
ALTER TABLE `ps_feature_lang` ADD INDEX `id_lang` (`id_lang`,`name`);
ALTER TABLE `ps_feature_product` ADD INDEX `id_product` (`id_product`);
ALTER TABLE `ps_product_attribute` MODIFY COLUMN `weight` decimal(20,6) NOT NULL DEFAULT '0.000000';
ALTER TABLE `ps_product_attribute` ADD COLUMN `available_date` date NOT NULL;
d) Nová verze Prestashopu má výrazně více tabulek, ne v?echny byly vpředcházejících dvou krocích naplněny. Následující příkazy by měly situaci napravit:
TRUNCATE TABLE ps_attribute_shop;
INSERT INTO ps_attribute_shop SELECT id_attribute, 1 FROM ps_attribute;
TRUNCATE TABLE `ps_attribute_group_shop` ;
INSERT INTO `ps_attribute_group_shop` SELECT id_attribute_group, 1 FROM ps_attribute_group;
TRUNCATE TABLE `ps_product_attribute_shop` ;
INSERT INTO `ps_product_attribute_shop` SELECT id_product_attribute, 1, wholesale_price, price, ecotax, weight, unit_price_impact, default_on, minimal_quantity, available_date FROM `ps_product_attribute`;
TRUNCATE TABLE ps_feature_shop;
INSERT INTO ps_feature_shop SELECT id_feature, 1 FROM ps_feature;
INSERT INTO ps_stock_available SELECT null, id_product, id_product_attribute, 1,0, quantity, 0,2 FROM ps_product_attribute
Heureka je pro některé eshopy vynikající prodejní kanál. A je?tě mnohem lep?í, pokud se podaří získat certifikát "Ověřeno zákazníky".
Modul Heureka - ověřeno zákazníky pro Prestu je ke sta?ení zdarma a funguje bez nějakých vět?ích připomínek ze strany u?ivatelů na Prestashopu 1.4 a očividně i Prestashop 1.5 .
Nicméně co kdy? se podaří certikát získat? Následující příklad je pro Prestu 1.4.
?edě: existující kod v .tpl
oran?ově: kod od heureka
zeleně: klíč který bude v zaslaném kodu odli?ný
1. Osazení banneru ověřeno zákazníky.
Zdaleka nejjednodu??í je pou?ít nějaký nevyu?itý blok, například blok reklamy. Takto vypadá upravený blockadvertising.tpl (pozor mů?e být u modulu nebo v adresáři tématu)
<!-- MODULE Block advertising -->
<div class="advertising_block">
{literal}
<div id="showHeurekaBadgeHere-3"></div><script type="text/javascript">
//<![CDATA[
var _hwq = _hwq || [];
_hwq.push(['setKey', 'nejakyklic123456']);_hwq.push(['showWidget', '3', '16687', 'domena.cz', 'domena-cz']);(function() {
var ho = document.createElement('script'); ho.type = 'text/javascript'; ho.async = true;
ho.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.heureka.cz/direct/i/gjs.php?n=wdgt&sak=nejakyklic123456';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ho, s);
})();
//]]>
</script>
{/literal}
</div>
<!-- /MODULE Block advertising -->
2. Klouzavý banner
Umístěno v header.tpl, vypsán je malý výsek z header.tpl plus nově přidaný kod
<script type="text/javascript">
var baseDir = '{$content_dir}';
var static_token = '{$static_token}';
var token = '{$token}';
var priceDisplayPrecision = {$priceDisplayPrecision*$currency->decimals};
var priceDisplayMethod = {$priceDisplay};
var roundMode = {$roundMode};
</script>
{literal}
<script type="text/javascript">
//<![CDATA[
var _hwq = _hwq || [];
_hwq.push(['setKey', 'nejakyklic123456']);_hwq.push(['setTopPos', '60']);_hwq.push(['showWidget', '22']);(function() {
var ho = document.createElement('script'); ho.type = 'text/javascript'; ho.async = true;
ho.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.heureka.cz/direct/i/gjs.php?n=wdgt&sak=nejakyklic123456'';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ho, s);
})();
</script>
{/literal}
Url: http://reeflexdesign.com/
Realizace: 2012
Verze shopu: 1.4.8
?ablona: zalomen návrh majitele
Hostováno: hosting majitele
Zákazník: Reeflexdesign.com
Co je na webu zajímavého:
- do eshopu jsme zalomili opravdu zajímavý grafický návrh dodaný majitelem - stojí za prohlédnutí
- extrémně zjednodu?ený nákupní proces, přeprogramovaný opět podle zadání majitele. Jednodu??í objednávka u? asi být nemů?e
Od nového roku platí pro vět?inu zbo?í a slu?eb DPH 21% sazba DPH. Nastavit ji v Prestashop 1.5 lze 2 způsoby. Ne? se k nim dostaneme, shrňme si základní informace o daních v Prestashopu.
Daně - definují vý?i daňové sazby, tedy procento DPH.
Pravidla pro daně - pod touto zálo?kou se skrývají vlastně skupiny daňových pravidel. Do ka?dé skupiny lze pak přidat jedno či více konkrétních pravidel. Pravidlo mů?e být omezeno na jednu zemi a pravidla v rámci skupiny se od sebe mohou li?it pou?itou daňovou sazbou. Tj. kdy? přiřazujete v cenách produktu daňové pravidlo, přiřadí se vlastně skupina a konkrétní pravidlo z této skupiny, tedy i vý?e daňové sazby, se aplikuje podle země zákazníka.
Jak tedy nastavit v Prestashop DPH 21%?
1) Zdaleka nejjednodu??í je přepsat DPH 20% na na sazbu 21 procent.
Nicméně setkal s hlá?kou "do?lo k chybě v aktualizaci objektu tax" kdy eshop místo aktualizace vytvořil novou daň. Po jejím smazání a opětovné změně DPH20 na 21 se ji? chyba nevyskytla a blí?e jsem ji nezkoumal.
2) Přidání nové daňové sazby (DPH) je slo?itěj?í.
Novou daň budete muset přidat, pokud z nějakého důvodu potřebujete zachovat DPH 20% i s její sazbou. Postup uvádím také jako ilustraci toho jak v Prestashop obecně přidat novou sazbu DPH:
a) Vytvořit a ulo?it novou daňovou sazbu Lokalizace - Daně - Přidat nový
b) Vytvořit novou skupinu pravidel Lokalizace - Pravidla pro daně - Přidat nový ... Ulo?it a zůstat
c) Po ulo?ení se zpřístupnilo tlačítko Přidat nové daňové pravidlo vpravo nahoře
Je potřeba vybrat zemi, daňovou sazbu a poté kliknout na button Ulo?it a zůstat - viz obrázek:
d) Nové pravidlo se objeví v seznamu
e) Nyní se přesvědčíme ?e daň opravdu funguje
f) Pokud máte více výrobků, asi nebudete chtít měnit jejich daňovou sazbu ručně. Nejrychleji hromadnou změnu provedeme v databázi např. přes phpMyAdmin.
Update ps_product SET id_tax_rules_group=11;
Update ps_product_shop SET id_tax_rules_group=11;
Je potřeba znát číslo daňového pravidla, v na?em případě je to 11, viz následující obrázek.