Ich versuche, rewrite product url
vom load product
in kundenspezifischen Modul zu erhalten. Ich erhalte eine URL im http://localhost/m2/catalog/product/view/id/1401/category/23/
Format.
Aber ich möchte http://localhost/m2/juno-jacket.html
Hier ist der Code
im Konstruktor
public function __construct(
\Magento\Catalog\Helper\Product $catalogProductHelper,
) {
$this->catalogProductHelper = $catalogProductHelper;
}
Benutzerdefinierte funktion
public function abc(){
$product_id = '123';
return $this->catalogProductHelper->getProductUrl($product_id);
}
abc() method
return url like http://localhost/m2/catalog/product/view/id/1401/category/23/
magento2
product
url
url-rewrite
magento-2.0
zed Blackbeard
quelle
quelle
getProductUrl()
soll die umgeschriebene URL zurückgeben, wenn der Eintrag in existierturl_rewrite
. Haben Sie manuell Datensätze aus dieser Tabelle gelöscht?Antworten:
Hier ist die Methode, mit der ich die Produkt-URL abgerufen habe.
Es ist definitiv nicht optimal, da ich das gesamte Produkt laden muss, um es in Bezug auf die Leistung so schlecht zu machen.
Zuerst müssen Sie
Magento\Catalog\Model\ProductRepository
in Ihren Konstruktor Folgendes einfügen:Dann laden Sie das Produkt basierend auf der Produkt-ID:
Schließlich können Sie das URL-Modell abrufen, um die umgeschriebene URL abzurufen:
quelle
Dies mag die Frage nicht wirklich beantworten, aber es besteht die Möglichkeit, dass Sie Ihr Produkt aus einer Produktkollektion entfernen, wenn Sie die URL-Umschreibung verpassen. Und das Hinzufügen von Informationen zum Umschreiben von URLs erfolgt nicht automatisch, wie Sie in sehen können
\Magento\Catalog\Model\ResourceModel\Product\Collection::$_addUrlRewrite
.Ich habe es geschafft, das Hinzufügen von URL-Umschreibungen zu erzwingen, indem ich ein Plug-in für die
create()
Methode von erstellt habe\Magento\Catalog\Model\ResourceModel\Product\CollectionFactory
. Und sobald Ihr Code (oder Magentos Kerncode) diese Factory zum Einleiten einer Produktkollektion verwendet (und dies sollte nach den besten Praktiken der Fall sein), erzwingt dieses Plugin das\Magento\Catalog\Model\ResourceModel\Product\Collection::$_addUrlRewrite
Antrue
.Anschließend werden die Produkte erfolgreich umgeschrieben, ohne dass eine Schleife erstellt und neu geladen werden muss. Auf diese Weise wird der Nachteil behoben, von dem @Raphael gesprochen hat.
Hier ist die XML-Definition des Plugins (in Ihrer
di.xml
Datei):Und der Plugin-Code:
quelle
Exportieren Sie Ihre Produkte in eine CSV-Datei
Verwenden Sie aus der CSV-Datei in Excel diese Formel für die Spalte url_key
Dabei ist "P103" die url_key-Spalte
quelle