Pereiti prie turinio
← Visos PrestaShop 9 klaidos

PrestaShop 9 klaidos

Call to undefined method Attribute::getAttributes() PrestaShop 8 ir 9 versijose

PrestaShop 8 pervadino Attribute klasę į ProductAttribute, nes PHP 8 turi savo Attribute klasę. Senas kodas, kviečiantis Attribute::, dabar pasiekia PHP klasę ir sustoja.

Klaida
Call to undefined method Attribute::getAttributes()
Pašalinta
PrestaShop 8.0
Dažniausiai randama
Moduliai, dirbantys su kombinacijomis, override failai

Kas nutiko

PrestaShop 1.7 prekių atributų reikšmes (dydis M, spalva Raudona) tvarkė klasė Attribute. PHP 8 pridėjo integruotą klasę tuo pačiu vardu, skirtą PHP atributams, tokiems kaip #[Route]. Dvi klasės su tuo pačiu vardu negali egzistuoti kartu, todėl PrestaShop 8.0 savo klasę pervadino į ProductAttribute.

Senas kodas nesustoja su „class not found“. Attribute vis dar yra, tik dabar tai PHP klasė. Todėl klaida atsiranda pirmą kartą iškvietus metodą:

  • Attribute::getAttributes($idLang) duoda Call to undefined method Attribute::getAttributes()
  • new Attribute($id) sukuria PHP atributo objektą, o kodas sustoja kiek vėliau, kai skaito ->name ar kviečia ->save()

Dėl to klaida klaidina: klasės vardas atrodo teisingas, bet niekas joje neveikia.

Sprendimas

Naudokite naują klasės vardą. Metodai ir savybės tie patys:

// Buvo (PrestaShop 1.7)
$values = Attribute::getAttributes($idLang);
$value = new Attribute($idAttribute, $idLang);

// Dabar (PrestaShop 8 ir 9)
$values = ProductAttribute::getAttributes($idLang);
$value = new ProductAttribute($idAttribute, $idLang);

Override failas override/classes/Attribute.php turi tapti override/classes/ProductAttribute.php su class ProductAttribute extends ProductAttributeCore. Po to ištrinkite var/cache/prod/class_index.php, kad PrestaShop jį rastų.

AttributeGroup vardas nepasikeitė.

Kur dar slepiasi

Kombinacijų, prekių pasirinkimų, filtrų, prekių srautų ir importo moduliuose. Ieškokite klasės, naudojamos kode, o ne tik žodžio:

grep -rn "Attribute::\|new Attribute(\|extends AttributeCore" modules/ override/

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ą