Klonování modulu v OpenCart
Při nastavování eshopu OpenCart můžete narazit na banální problém. Aby pro různé země byly různé sazby poštovného (různá výše poplatku za dobírku). Například dobírka pro Českou Republiku a další, v jiné výši, pro několik dalších států EU. Jediná možnost, jak něčeho takového dosáhnout je konkrétní modul oklonovat a následně ho nakonfigurovat požadovaným způsobem. To je nutné udělat pro každou jednotlivou modifikaci. Přijde mi to jako značně nepohodlné, ale realizace není zdaleka tak těžká. Takže, jak na to?
Konkrétní požadavky na funkčnost, zadání
Můj konkrétní problém se týkal paušální platby. Potřebuji rozlišit dobírku pro Českou Republiku a dobírku pro EU státy. Dobírkovné se pro daný region již nemění. S hypotetickými s cenami je můj případ:
- Dobírka pro ČR za 100Kč
- Dobírka pro EU za 300Kč
Malý výlet do adresářové struktury
Ještě než začneme klonovat je dobré si udělat malý výlet do adresářové struktury aplikace OpenCart. V zásadě je pro nás důležité dvojí dělení: moduly ovlivňující administrátorskou část a moduly ovlivňující chování obchodu. Na těchto cestách se nachází moduly i jejich překlady:
- Administrace:
- Samotné moduly: adresa_eshopu/admin/controller/
- Šablony modulů: adresa_eshopu/admin/view/template/
- Lokalizace modulů: adresa_eshopu/admin/language/jazyk/
- eshop : adresa_eshopu/calalog
- Samotné moduly: adresa_eshopu/catalog/controller/
- Šablony modulů: adresa_eshopu/catalog/view/theme/vase_tema/template/
- Lokalizace modulů: adresa_eshopu/catalog/language/jazyk/
Zde je vždy nutné dohledat příslušný modul, všechny jeho soubory a tyto soubory oklonovat (zkopírovat).
Klonování modulu a modifikace souborů
Samotné klonování probíhá ve dvou krocích. Prvně je potřeba soubory zkopírovat a následovně je nutné tyto soubory editovat a pozměnit.
Modul se kterým budume pracovat se jmenuje flat. Tedy je potřeba oklonovat tento modul. Osobně při klonování používám jednoduché kopírování a za konec názvu souboru přidám pořadové číslo. Výsledkem jsou tyto, nové, soubory:
/admin/controller/shipping/flat2.php
/admin/language/english/shipping/flat2.php
/admin/view/template/shipping/flat2.tpl
/catalog/language/english/shipping/flat2.php
/catalog/model/shipping/flat2.php
Jelikož používám navíc češtinu, je potřeba navíc provést klonování/kopii souborů v adresáři czech. Pokud OpenCart nenalezne jazykovou mutaci pro konkrétní modul, při práci s tímto souborem skončí bílou obrazovkou s výpisem názvu modulu požadující překlad.
Ale práce ještě nekončí! U všech souborů (kromě překladů, tam je to jen otázkou potřeby) je ještě nutné provést editaci a plošně zaměnit původní jméno modulu za nové. Bez této editace budou některé stránky končit čistou bílou stránkou bez jakéhokoliv výpisu chyby. Pro tuto operaci použijte libovolný textový editor (PSPad, Notepad++ apod.) a funkci hromadné nahrazení. V mém případě jsem tedy nahradil všechny výskyty flat za flat2.
Nastavení OpenCart a ověření funkčnosti
Nyní, když máme všechny soubory zkopírovány a změněny, zbývá nastavit samotný OpenCart. Před samotným nastavením plošných poplatků si ještě připravíme Geo Zóny. Těmito zónami odlišíme zákazníky (do jaké země se registrovali) a budeme vědět, kterému přiřadíme který poplatek. Geo zóny se nachází v menu: Správa / Konfigurace / Lokalizace / Geo zóna. Zde je nutné vytvořit dvě zóny. První jsem nazval Česká republika, dal do ní pouze ČR. Druhou jsem nazval ostatní státy a vložil do ní všechny státy EU.
No a posledním krokem a je samotné přiřazení paušálních částek k jednotlivým Geo zónám. V administraci pod položkou Rozšíření / Doprava by se měly nyní objevit dvě položky Paušální sazba. Původní a klonovaná. Pokud je potřebujete nějak odlišit, změnte jednomu jméno v souboru s překladem. Obě položky nainstalujte, aktivujte a každé přiřaďte jednu z výše zmíněných zón v závislosti na nastavené částce.
Ukázka konfigurace paušální částky pro země EU:
Doufám, že se toto mini-howto bude někomu hodit a snad v dalších verzích OpenCart již tato drobnost bude řešena elegantněji. Tak ať vám eshop běží.
Dobrý den,
jak konkrétně je myšleno následující:
„Ale práce ještě nekončí! U všech souborů (kromě překladů, tam je to jen otázkou potřeby) je ještě nutné provést editaci a plošně zaměnit původní jméno modulu za nové. Bez této editace budou některé stránky končit čistou bílou stránkou bez jakéhokoliv výpisu chyby. Pro tuto operaci použijte libovolný textový editor (PSPad, Notepad++ apod.) a funkci hromadné nahrazení. V mém případě jsem tedy nahradil všechny výskyty flat za flat2.“
Provedl jsem klonování, v OpenCartu mi naběhla další paušální sazba, po kliknutí na upravit vyskočila hláška:
Fatal error: Class ‚Controllershippingflat2‘ not found in :system/engine/front.php on line 39
Děkuji.
Nejspíš jsi to plošné zeměnění vzal trochu jednoduše. Musíš zaměnit jen výrazy „flat“ a ne „*flat*“.
zdarec podařilo se ti to nějak vyřešit?
momentálně mi to píše že stránka nejde zobrazitb zduvodu špatné komprimace
nedaří se mi vyřešit problém s přejmenováním Paušální sazby. nemůžete mi někdo poradit?
Může mi někdo prosím poradit? Tento návod nepomáhá. Děkuji!
„Paušální sazbu“ přejmenuješ přes PSPad v souboru flat2.php ve složce tvujeshop/admin/language/english (případně czech)/shipping/
pomocí tohoto návodu se mi podařilo napodruhé modul naklonovat. Je třeba opravdu přejmenovat každý výskyt slova (včetně např ModelShippingFlat -> ModelShippingFlat2)
V shopu jsem si nechal vyhledat všechny soubory s názvem flat.php, udělal klon flat2.php a provedl přes CTRL+H nahrazení
Zdravím Vás.
Základy tworby webu na opencart 1.5.5.1 snad chápu a možná si poradím se spoustou věcí, narazil jsem však na jeden požadavek týkající se kategorií, kolem kterého se motám dokola a výsledek pro mne není uspokojivý. Nevím kdy Vás tady zastihnu, ale potřeboval bych trochu nakopnout a poradit. Můžete mne kontaktovat? Děkuji. Pavel.
Dobrý den
Nevěděl by někdo prosím jak přejmenovat název flat na slovo dobírka?
Na novou verzi 2+ opencartu modul ceske posty nefunguje.
Díky O.
Dobrý den,
na několika shopech jsem tento postup pouzil.. Naprosto bez problemu. Dekuji.
Ovsem nyni se mi nedari. Vse se tvari v poradku, na objednavce mam dalsi dopravu… Ale kdyz v adminu chci objednavku upravit, zarve chybu
syntax error unexpected token in json at position 0
Nevíte, čím to? Díky