PrestaShop 9 klaidos
Call to undefined method Tools::jsonEncode() atnaujinus PrestaShop
Tools::jsonEncode() ir Tools::jsonDecode() pašalinti PrestaShop 8.0. Parduotuvės, kurios iš 1.7 šoka tiesiai į 9, šią klaidą sutinka senesniuose moduliuose. Pataisymas – viena eilutė.
- Klaida
Call to undefined method Tools::jsonEncode()- Pašalinta
- PrestaShop 8.0
- Dažniausiai randama
- Senesni moduliai, override failai
Kas nutiko
Tools::jsonEncode() ir Tools::jsonDecode() buvo ploni PHP funkcijų json_encode() ir json_decode() apvalkalai, likę iš laikų, kai PHP ne visada turėjo JSON palaikymą. PrestaShop 8.0 juos pašalino.
Parduotuvės, kurios iš 1.7 atnaujinamos tiesiai į 9, praleidžia 8 versiją, todėl iš karto susiduria su abiejų versijų pakeitimais. Ši klaida viena dažniausių, nes ją naudojo beveik kiekvienas modulis, kuris bendrauja su JavaScript ar saugo nustatymus JSON formatu.
Sprendimas
Kvieskite PHP funkcijas tiesiogiai. Jos priima tuos pačius argumentus:
// Buvo
$json = Tools::jsonEncode($data);
$data = Tools::jsonDecode($json, true);
// Dabar (veikia visose PrestaShop versijose)
$json = json_encode($data);
$data = json_decode($json, true);
Jei senas kodas tikėjosi, kad Tools::jsonDecode() grąžins objektą, kvieskite json_decode($json) be antro argumento – jis taip pat grąžina objektą.
Kur dar slepiasi
grep -rn "Tools::json" modules/ themes/ override/
Tie patys moduliai dažnai naudoja ir kitas 8.0 pašalintas pagalbines funkcijas, pavyzdžiui, Media::getJqueryPath() (žr. jQuery failai grąžina 404) ar Cookie::isLogged() (vietoj jo $this->context->customer->isLogged()). Jei parduotuvė dar 1.7 versijos, tikėkitės ir PHP 8 klaidų: PrestaShop 9 reikia PHP 8.1 ar naujesnės, žr. Call to undefined function each().