PrestaShop 9 klaidos
Call to undefined method addJquery() PrestaShop 9 versijoje
PrestaShop 9 pašalino addJquery() iš valdiklių. Moduliai, kurie jį vis dar kviečia hook'e, sustabdo visą puslapį su fatal error, nors nuo 1.7.7 šis kvietimas nieko nedarė.
- Klaida
Call to undefined method ProductController::addJquery()- Pašalinta
- PrestaShop 9.0
- Dažniausiai randama
- Modulių antraštės hook'ai, modulių valdikliai
Kas nutiko
Senesni moduliai puslapio failus ruošia su $this->context->controller->addJquery(), dažniausiai hookDisplayHeader ar hookActionFrontControllerSetMedia, kad jQuery tikrai būtų puslapyje prieš jų skriptą.
Nuo PrestaShop 1.7.7 šis kvietimas nieko nedarė: jQuery įkeliamas visada, o metodas tik įrašydavo įspėjimą apie pasenusį kodą. PrestaShop 9.0 jį pašalino iš bazinės Controller klasės. Dabar ta pati eilutė – fatal error.
Kadangi antraštės hook'ai vykdomi kiekviename puslapyje, klaida retai lieka viename kampe: klaidą 500 rodo prekių puslapiai, krepšelis ar visa parduotuvė. Pranešime nurodoma atidaryto puslapio klasė, pavyzdžiui, ProductController::addJquery(), IndexController::addJquery() ar AdminOrdersController::addJquery().
Sprendimas
Ištrinkite kvietimą. jQuery jau yra:
// Buvo
public function hookDisplayHeader()
{
$this->context->controller->addJquery();
$this->context->controller->registerJavascript('mymodule', 'modules/mymodule/views/js/front.js');
}
// Dabar (veikia 1.7.7, 8 ir 9)
public function hookDisplayHeader()
{
$this->context->controller->registerJavascript('mymodule', 'modules/mymodule/views/js/front.js', ['position' => 'bottom', 'priority' => 200]);
}
addJqueryUI() ir addJqueryPlugin() PrestaShop 9 versijoje liko, todėl eilutės, kurios įkelia jQuery UI komponentą ar kartu pateikiamą įskiepį, gali likti.
„jQuery is not defined“ šablone
Kita to paties įpročio pusė – modulio šablonas su įterptu <script>, kuris naudoja $ ar jQuery. Nuo PrestaShop 1.7 tema jQuery įkelia puslapio apačioje (Classic jį įtraukia į themes/core.js), todėl anksčiau išvestas įterptas skriptas paleidžiamas prieš jį ir sustoja su jQuery is not defined. addJquery() to niekada netaisė.
Arba perkelkite kodą į JS failą, registruotą su registerJavascript() kaip aukščiau, arba įterptame skripte palaukite, kol puslapis įsikels:
<script>
document.addEventListener('DOMContentLoaded', function () {
$('.mymodule-block').addClass('ready');
});
</script>
Kur dar slepiasi
grep -rn "addJquery()" modules/ override/ themes/
Paieška su skliaustais randa tik patį addJquery(), ne addJqueryUI() ar addJqueryPlugin(). Apie 404 klaidas senuose jQuery failuose – jquery-1.11.0.min.js 404.