Je travaille avec une extension personnalisée liée à plusieurs sites Web. Je suis confronté à un problème, définissez un code de script à exécuter dans le panneau d'administration en obtenant l'ID de site Web. Je m'attendais à un résultat website_id
comme 0 (ID par défaut dans le store_website
tableau). Mais lorsque j'utilise cette fonction ci-dessous, elle renvoie toujours 1.
/** @var \Magento\Store\Model\StoreManagerInterface */
$this->_storeManager->getStore()->getWebsiteId(); //return 1, expect 0
$this->_storeManager->getWebsite()->getId(); //return 1
Ma question : Est-il possible de se mettre à jour
website_id
dans le panneau d'administration ou de définir une fonction exécutée dans laadminhtml
zone?Remarque: Cette fonction doit fonctionner à la fois sur le frontend et le backend.
Toute aide serait appréciée.
Réponses:
L'idée générale est de passer la portée choisie par le paramètre request.
Je pense que vous devriez utiliser le code similaire comme dans l'action d'édition du produit:
Dans ce cas, l'
$store->getWebsiteId()
identifiant du site Web doit être réel (sélectionné). Mais cela ne peut être fait que si vous utilisez le bloc de magasin qui fonctionne de la même manière qu'un bloc magento standard (pour sélectionner une étendue de magasin):Voici mon résultat dans l'exemple lorsque je sélectionne la vue de magasin par défaut (id == 1):
et voici la portée globale par défaut ( toutes les vues de magasin , l'ID du site Web est 0):
Mettre à jour:
Vous pouvez ajouter une méthode comme celle-ci dans l'assistant et l'utiliser où vous le souhaitez:
Le résultat devrait être comme ceci:
Backend sans sélecteur de portée - 0
Soutenu avec le sélecteur de portée - ID de site Web sélectionné ou 0 si rien n'est sélectionné (toutes les vues du magasin)
Frontend - identifiant actuel du site Web
Si vous recherchez le raccourci sur le frontend:
Vous pouvez utiliser la
Magento\Store\Model\StoreResolver
classe à cette fin:Il détecte correctement la vue de magasin actuellement sélectionnée sur la zone frontend, mais inutile pour la zone d'administration.
la source
website_id = 0