Pereiti prie turinio
← Visos PrestaShop 9 klaidos

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ą:

  • Currency objektas: $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ą.

Raskite visas tokias vietas prieš atnaujindami

Kur yra vienas pašalintas kvietimas, paprastai yra ir daugiau. Mūsų nemokama PrestaShop 9 parengties patikra perskaito visų modulių, temos ir override failų kodą ir parodo kiekvieną problemą su failu ir eilute. Ji tik skaito, nieko nekeičia.

Gauti nemokamą patikrą

Nenorite taisyti patys? Parduotuves į PrestaShop 9 atnaujiname už fiksuotą kainą. Apie atnaujinimą