Je développe une extension de Magento 2. J'ai besoin d'obtenir l'URL frontend d'un produit depuis le backend. J'ai essayé d'utiliser:
//$storeManager->->setCurrentStore(2);
$url = $product->setStoreId(2)->getProductUrl();
$url = $product->setStoreId(2)->getUrlInStore();
mais le $url
retourne toujours une URL de backend, comme http://<domain>/admin/catalog/product....
. ils peuvent fonctionner dans Magento 1.x mais pas pour 2.x. Existe-t-il un moyen d'obtenir une URL frontale?
Réponses:
Ajoutez une nouvelle dépendance de constructeur à votre classe forntUrlModel:
Et utilisez DI pour injecter la bonne dépendance
la source
\Magento\Framwork\Url
directement?Je réponds à ma question. La réponse de mtns_cll à la question de Magento 2 obtenir l'URL de la boutique frontend pour un chemin dans l'administration fonctionne pour moi.
Je poste ma solution ici au cas où quelqu'un en aurait besoin:
frontend du produit :
injecter
\Magento\Framework\Url $url
backend produit
injectez
\Magento\Framework\UrlInterface $url
ou utilisez l'interface url héritée de la classe parente.frontend de catégorie
inject `\ Magento \ Framework \ Url $ url
backend de catégorie
injectez
\Magento\Framework\UrlInterface $url
ou utilisez l'interface url héritée de la classe parente.frontal de page cms
injecter
Magento\Cms\Block\Adminhtml\Page\Grid\Renderer\Action\UrlBuilder $rul
backend de page cms
injectez
\Magento\Framework\UrlInterface $url
ou utilisez l'interface url héritée de la classe parente.cms block backend
injectez
\Magento\Framework\UrlInterface $url
ou utilisez l'interface url héritée de la classe parente.la source
Vous pouvez essayer d'utiliser
Magento/Store/Model/StoreManager
. Injectez-le dans un constructeur viaMagento/Store/Model/StoreManagerInterface
, plus ou moins comme ceci:Vous devriez remarquer que la fonction
getStore()
comme argument peut prendre non seulement un entier, mais aussi une chaîne ou un objet:la source