J'essaie d'obtenir à rewrite product url
partir du load product
module personnalisé. Je reçois l'URL au http://localhost/m2/catalog/product/view/id/1401/category/23/
format.
Mais je veux http://localhost/m2/juno-jacket.html
Voici le code
en constructeur
public function __construct(
\Magento\Catalog\Helper\Product $catalogProductHelper,
) {
$this->catalogProductHelper = $catalogProductHelper;
}
Fonction personnalisée
public function abc(){
$product_id = '123';
return $this->catalogProductHelper->getProductUrl($product_id);
}
abc() method
renvoyer l'URL comme http://localhost/m2/catalog/product/view/id/1401/category/23/
magento2
product
url
url-rewrite
magento-2.0
zed Blackbeard
la source
la source
getProductUrl()
est censé renvoyer l'URL réécrite si l'entrée existe dansurl_rewrite
. Avez-vous supprimé manuellement les enregistrements de ce tableau?Réponses:
Voici la méthode que j'ai utilisée pour obtenir l'URL du produit.
Ce n'est certainement pas optimal car je dois charger tout le produit pour qu'il soit si mauvais en termes de performances.
Vous devez d'abord injecter un
Magento\Catalog\Model\ProductRepository
dans votre constructeur:Ensuite, vous chargez le produit en fonction de l'ID du produit:
Enfin, vous pouvez obtenir le modèle d'URL pour récupérer l'URL réécrite:
la source
Cela ne répond peut-être pas vraiment à la question, mais il est probable que, si la réécriture de l'URL vous manque, vous retirez peut-être votre produit d'une collection de produits. Et l'ajout d'informations de réécriture d'URL n'est pas automatique comme vous pouvez le voir dans
\Magento\Catalog\Model\ResourceModel\Product\Collection::$_addUrlRewrite
.La façon dont j'ai réussi à forcer l'ajout de réécritures d'URL consiste à créer un plugin sur la
create()
méthode de\Magento\Catalog\Model\ResourceModel\Product\CollectionFactory
. Et dès que votre code (ou le code de base de Magento) utilise cette usine pour instancier une collection de produits (et cela devrait, selon les meilleures pratiques), ce plugin force le\Magento\Catalog\Model\ResourceModel\Product\Collection::$_addUrlRewrite
àtrue
.Ensuite, les réécritures d'URL de produits sont ajoutées avec succès aux produits sans qu'il soit nécessaire de les boucler et de les recharger. Il corrige ainsi l'inconvénient de la performance dont @Raphael a parlé.
Voici la définition XML du plugin (dans votre
di.xml
fichier):Et le code du plugin:
la source
Exportez vos produits vers un fichier csv
à partir du fichier csv dans Excel, utilisez cette formule pour la colonne url_key
où "P103" est la colonne url_key
la source