PrestaShop 9 klaidos
Call to undefined method Tools::displayPrice() PrestaShop 9 versijoje
PrestaShop 9 pašalino Tools::displayPrice(). Kiekvienas modulis ar override failas, kuris juo formatuoja kainą, sustoja su fatalia klaida. Kuo jį pakeisti ir kur ieškoti.
- Klaida
Call to undefined method Tools::displayPrice()- Pašalinta
- PrestaShop 9.0
- Dažniausiai randama
- Moduliai, override failai
Kas nutiko
Tools::displayPrice() paversdavo skaičių kaina su valiutos ženklu, pavyzdžiui, 12.5 į 12,50 €. Kainų formatavimą PrestaShop jau seniai perkėlė į lokalizacijos komponentą, o senąjį metodą paliko kaip trumpinį. PrestaShop 9.0 jo nebeliko.
Kodas, kuris vis dar jį kviečia, dabar baigiasi fatalia klaida. Jei kvietimas vykdomas kiekviename puslapyje (antraštės blokas, prekių sąrašas, krepšelio suvestinė), visa parduotuvė gali rodyti baltą puslapį ar klaidą 500. Jei tik vienoje vietoje, sugenda tik ta vieta, pavyzdžiui, modulio nustatymų puslapis ar vienas laiškas.
Sprendimas
Kainą formatuokite per esamą lokalę:
// Buvo (PrestaShop 1.7 ir 8)
$formatted = Tools::displayPrice($price, $currency);
// Dabar (veikia 1.7.6+, 8 ir 9)
$context = Context::getContext();
$formatted = $context->getCurrentLocale()->formatPrice($price, $context->currency->iso_code);
Jei senas kvietimas perduodavo valiutą, naudokite jos ISO kodą:
Currencyobjektas:$currency->iso_code- valiutos ID:
Currency::getIsoCodeById((int) $idCurrency)
formatPrice() laikosi parduotuvės kalbos nustatymų, todėl rezultatas sutampa su kainomis, kurias PrestaShop rodo kitur.
Šablonuose
Parduotuvės šablonai kainų patys neformatuoja. PrestaShop jau perduoda temai suformatuotas kainas (pavyzdžiui, {$product.price}), todėl šablonas kainą turi gauti paruoštą iš PHP pusės. Smarty funkcija {displayPrice} visose versijose veikia tik administravime, kaip ir PrestaShop 1.6 laikų žyma {convertPrice}: parduotuvės šablone abi sustoja su unknown tag. Sumą, kurią modulis apskaičiuoja pats (pavyzdžiui, kuponą ar mokestį), suformatuokite hook'e su formatPrice() ir šablonui perduokite jau paruoštą tekstą.
Kur dar slepiasi
Tools::displayPrice() retai būna vienas. Tuo pačiu metu rašytas modulis dažnai naudoja ir Tools::displayNumber(), Tools::jsonEncode() ar ajaxDie() – visi pašalinti PrestaShop 8 ar 9. Ieškokite visame modulio aplanke, temoje ir override/ aplanke, ne tik klaidoje nurodytame faile:
grep -rn "displayPrice\|displayNumber" modules/ themes/ override/
Atminkite, kad kitų kūrėjų moduliuose jūsų pataisymai dings po kito atnaujinimo. Jei autorius turi PrestaShop 9 versiją, geriau įdiekite ją.