Unable to install override v PrestaShopu: konflikt overridů a jak ho vyřešit
Hláška „Unable to install override“ v PrestaShopu znamená, že instalovaný modul chce přepsat metodu třídy, kterou už přepisuje jiný modul nebo starý soubor ve složce override. PrestaShop dva overridy sám nesloučí, takže instalaci zastaví. Řešením je odstranit osiřelý override, nebo ručně sloučit kód obou modulů, se zálohami.
Autor: Tým TellMyShop. Průvodce pro majitele obchodů na PrestaShopu: příčina, ruční oprava a stejná práce v rozhovoru v chatu.
Naposledy aktualizováno: · 5 min čtení
Odkud se konflikt overridů bere?
Override je soubor, kterým modul nahrazuje část fungování PrestaShopu, například výpočet ceny dopravy v košíku. Při instalaci PrestaShop tento soubor zkopíruje ze složky modulu do složky override e-shopu. Při odinstalaci ho odtud odstraní.
Overridy jsou výlučné. Jedna metoda jedné třídy může mít jen jednu nahrazenou verzi. Dokumentace PrestaShopu pro vývojáře říká otevřeně, že modul s overridem může ostatním modulům zabránit, aby stejné chování měnily. Proto tým PrestaShopu doporučuje overridy jen ve vlastních modulech, zatímco moduly na prodej používají háčky.
Nejčastější situace, které končí touto hláškou:
| Situace | Jak ji poznat | Co obvykle pomůže |
|---|---|---|
| Dva moduly mění stejnou metodu | hláška uvádí třídu a metodu a v override je soubor s touto metodou z jiného modulu | sloučení kódu obou overridů do jednoho souboru, nebo vzdát se jednoho modulu |
| Override po starém modulu | modul v seznamu není, ale soubor v override má pořád jeho kód | odstranění osiřelé metody ze souboru, se zálohou |
| Opakovaná instalace stejného modulu | modul byl odinstalován s chybou a neuklidil po sobě | odstranění zbytků, pak nová instalace |
| Ruční změna z dávných let | soubor v override bez komentáře o modulu, nikdo si nepamatuje, odkud je | zjistit od předchozího vývojáře, co dělá, než na něco sáhnete |
| Stará mezipaměť tříd | chyba se vrací i po odstranění overridu | vymazání mezipaměti e-shopu |
Polský prodejce modulů PrestaShow popisuje stejný vzorec ve své znalostní bázi (polsky): přejmenovat stávající soubor, nainstalovat modul a pak oba soubory ručně sloučit. Radí také na tu dobu zapnout režim údržby.
Jak vyřešit „Unable to install override“ krok za krokem
Tohle je práce pro vašeho vývojáře. Níže je seznam, který mu můžete předat. Každý krok začíná zálohou, protože soubory v override mění fungování celého e-shopu.
- Uložte si celou hlášku. Potřebujete název třídy a metody. Bez nich vývojář hádá.
- Zálohujte databázi a složku
override. Ideálně celý e-shop, nebo aspoň tuto složku a složku instalovaného modulu. - Najděte soubor, který tuto metodu už přepisuje. U třídy
Cartje to obvykleoverride/classes/Cart.php. Moduly často nechávají nad metodou komentář s názvem modulu a datem instalace. - Ověřte, zda modul, kterému patří, v e-shopu je. Pokud ne, metoda je osiřelá a lze ji ze souboru odstranit. Pokud ano, kód obou modulů se musí sloučit tak, aby fungovaly oba.
- Vymažte mezipaměť. V Rozšířené parametry → Výkon je tlačítko pro vymazání mezipaměti. PrestaShop pak znovu sestaví seznam tříd s overridy.
- Nainstalujte modul znovu a zkontrolujte košík, dopravu nebo cokoli, čeho se override týká. Udělejte testovací objednávku.
Při hledání viníka pomůže přepínač „Vypnout všechny overridy“ v Rozšířené parametry → Výkon. Funkční dokumentace PrestaShopu ho popisuje jako přepínač pro všechny overridy tříd a kontrolerů. Zasahuje celý e-shop, takže ho používejte krátce, ideálně na testovací kopii.
Co nedělat, když modul nejde nainstalovat
Pár zkratek, které z jedné hlášky udělají větší problém:
- Mazat soubor z
overridenaslepo. Modul, který ho přidal, přestane fungovat bez jakékoli hlášky. Někdy jde o cenu dopravy nebo slevu v košíku. - Kopírovat metodu z jednoho souboru do druhého bez čtení. Dvě verze stejné metody v jedné třídě jsou chyba PHP a bílá obrazovka.
- Upravovat soubory ve složce modulu. Změny při aktualizaci modulu zmizí a konflikt se vrátí.
- Nechat overridy vypnuté natrvalo. Moduly, které je potřebují, pak fungují jen napůl.
Pokud se po instalaci objevila chyba 500, podívejte se do průvodce chybou 500 v PrestaShopu. Chybovou hlášku najdete po zapnutí debug mode.
Jak chat pomůže vývojáři s konfliktem overridů?
Váš chat (Claude nebo ChatGPT) s modulem TellMyShop čte e-shop tak, jak by to udělal vývojář na první schůzce. V bezplatném TellMyShop Free vidí seznam modulů s verzemi a záznamy chyb e-shopu, takže pomůže určit, kdy problém začal. Soubory overridů a modulů čte jen TellMyShop Pro, bez potřeby přepínačů.
Vy: Instalace modulu dopravy končí hláškou Unable to install override, metoda getOrderShippingCost ve třídě Cart. Co mám dělat?
Váš chat: V override/classes/Cart.php přepisuje metodu getOrderShippingCost modul dopravy zdarma. Ten modul je nainstalovaný a zapnutý. Nový modul chce přepsat stejnou metodu. Navrhuji obě verze sloučit: nejdřív počítá nový modul a hranice dopravy zdarma funguje jako teď. Náhled změny v souboru:
Uložení souboru ve složce override potřebuje přepínač Servis. Před uložením udělám kopii souboru. Mám ukázat celý kód, aby ho zkontroloval váš vývojář?
stará verze: public function getOrderShippingCost(...) { /* verze modulu dopravy zdarma */ }
nová verze: public function getOrderShippingCost(...) { /* sloučená verze: nový modul + hranice dopravy zdarma */ }
Názvy modulů a kód v příkladu jsou ilustrační. Ve skutečné konverzaci chat ukáže celý kód metody, ne shrnutí.
Co který krok potřebuje:
- Čtení souborů v
overridea v modulech funguje v TellMyShop Pro hned, u textových souborů do 1 MB. - Změna souboru ve složce modulu potřebuje přepínač Moduly, který platí 24 hodin.
- Změna souboru ve složce
overridee-shopu spadá pod přepínač Servis. Ten dává plný technický přístup, proto se po 3 hodinách sám vypne. - Nová instalace modulu z balíčku ZIP potřebuje opět přepínač Moduly.
Kterýkoli přepínač zapnete, jen když má modul úspěšnou zálohu databáze ze stejného dne. Před uložením každého souboru vznikne jeho kopie a soubory PHP se kontrolují na chyby syntaxe. Každou změnu nejdřív vidíte v náhledu, uloží se po vašem „ano“ a zapíše se do historie změn. Většinu změn můžete vrátit zpět, včetně souboru obnoveného z kopie. Odinstalaci modulu vrátit nejde, proto chat navrhuje nejdřív modul vypnout.
Abychom byli féroví: při slučování kódu dvou modulů chat ukáže příčinu a návrh opravy, ale za rozhodnutí, zda sloučená metoda dělá to, co oba moduly očekávají, odpovídá vývojář nebo autor modulu. Podobný příklad najdete v případu použití oprava chyby v kódu modulu a čtení záznamů v případu použití chybové hlášky po aktualizaci modulu.
Jak se vyhnout konfliktům s budoucími moduly?
Před koupí modulu se zeptejte autora, zda používá overridy, a pokud ano, pro které třídy. Moduly postavené na háčcích se střetávají méně často. Při instalaci dodržujte pořadí z průvodce jak nainstalovat modul PrestaShop a nepoužívané moduly vypínejte, místo abyste je mazali, dokud si nejste jistí, že na nich nic nezávisí.
Než začnete moduly uklízet, můžete e-shop zkontrolovat v bezplatném TellMyShop Free. Plné čtení souborů a ukládání se zálohami fungují v TellMyShop Pro, ceny jsou v ceníku.
Otázky a odpovědi
Co přesně znamená hláška Unable to install override?
PrestaShop se pokouší zkopírovat soubor override z instalovaného modulu do složky override e-shopu a narazí na metodu, kterou už mění jiný soubor. Dva moduly nemohou přepsat stejnou metodu stejné třídy, takže se instalace zastaví. Hláška obvykle uvádí třídu a metodu, například Cart a getOrderShippingCost.
Rozbije tato chyba e-shop, který už běží?
Obvykle ne. Instalace nového modulu se nedokončí a e-shop funguje jako před pokusem. Potíže začnou, když se to někdo pokusí obejít silou, například smaže soubor ze složky override, aniž by zjistil, komu patří.
Můžu soubor ze složky override prostě smazat?
Jen když víte, že patří modulu, který už v e-shopu není. Pokud soubor patří fungujícímu modulu, tento modul přestane dělat to, k čemu je, například počítat dopravu po svém. Nejdřív zjistěte, který modul override přidal, a udělejte kopii souboru.
Vyřeší TellMyShop konflikt overridů sám?
TellMyShop Pro umožní chatu přečíst oba overridy, ukázat na konfliktní metodu a připravit sloučený soubor v náhledu. Uložení souboru ve složce override vyžaduje zapnutí přepínače Servis na 3 hodiny a před uložením vznikne kopie souboru. Rozhodnutí, jak sloučit kód dvou modulů, je ale lepší nechat na vývojáři nebo autorovi modulu.
PrestaShop je registrovaná ochranná známka společnosti PrestaShop SA. Claude je ochranná známka společnosti Anthropic PBC. ChatGPT a OpenAI jsou ochranné známky společnosti OpenAI. TellMyShop s těmito společnostmi není propojen.