J'ai très peu d'expérience avec Magento2, mais je suis confronté à un problème qui nécessite potentiellement un aperçu de quelqu'un qui le fait.'Forcer' le bloc magento-init à exécuter?
J'ai seulement un accès frontal.
Je suis avec le bloc magento-init
suivant:
<script type="text/x-magento-init">
{
"*":
{
"Magento_Customer\/js\/customer-data":
{
"sectionLoadUrl": "http:\/\/www.example.com\/customer\/section\/load\/",
"cookieLifeTime": "3600",
"updateSessionUrl": "http:\/\/www.example.com\/customer\/account\/updateSession\/"
}
}
}
</script>
dans la body
de ma page, que je compterais remplir un sectionLoadUrl
sous Magento_Customer/js/customer-data
.
Juste avant ma balise de fermeture </body>
, j'inclure un fichier qui exécute la fonction suivante:
function highlightWishlistHearts() {
require(['Magento_Customer/js/customer-data'], function(customerData) {
customerData.reload(['wishlist'], false).complete(function(response) {
var customerWishlist = jQuery.parseJSON(response.responseText).wishlist.items;
for (var i = 0, wishlistLength = customerWishlist.length; i < wishlistLength; i++) {
var productURL = customerWishlist[i].product_url;
jQuery('.product-item-actions').each(function() {
if (productURL === jQuery(this).data('product-url')) {
jQuery(this).children('.towishlist.remove').addClass('inwishlist');
}
});
}
});
});
}
Le but de cette fonction est d'ajouter une classe à ces produits sur la page qui appartiennent à la liste de l'utilisateur . Toutefois, cela génère une erreur de console, en spécifiant que sectionLoadUrl is undefined
. Si j'appelle à la place la fonction depuis l'intérieur d'un setTimeout
, elle s'exécute comme je l'aurais espéré, après le délai spécifié de 5s. Je veux éviter d'utiliser un setTimeout
, donc je voudrais encourager des idées sur la façon dont je peux résoudre ce problème. Est-il possible de forcer l'exécution du bloc magento-init
lorsqu'il est défini? Y a-t-il peut-être une autre dépendance que je pourrais ajouter à mon bloc require
qui forcerait cela à attendre suffisamment longtemps? Y a-t-il plus que je dois considérer? J'ai essayé d'inclure le bloc magento-init
dans le head
de la page, mais je n'ai pas vu de meilleur résultat.