Estoy tratando de obtener rewrite product url
desde el load product
módulo personalizado. Estoy obteniendo url en http://localhost/m2/catalog/product/view/id/1401/category/23/
formato.
Pero yo quiero http://localhost/m2/juno-jacket.html
Aqui esta el codigo
en constructor
public function __construct(
\Magento\Catalog\Helper\Product $catalogProductHelper,
) {
$this->catalogProductHelper = $catalogProductHelper;
}
Función personalizada
public function abc(){
$product_id = '123';
return $this->catalogProductHelper->getProductUrl($product_id);
}
abc() method
URL de retorno como http://localhost/m2/catalog/product/view/id/1401/category/23/
magento2
product
url
url-rewrite
magento-2.0
zed Blackbeard
fuente
fuente
getProductUrl()
se supone que devuelve la URL reescrita si la entrada existe enurl_rewrite
. ¿Eliminó registros de esta tabla manualmente?Respuestas:
Aquí está el método que utilicé para obtener la URL del producto.
Definitivamente no es óptimo ya que tengo que cargar todo el producto para que sea tan malo en términos de rendimiento.
Primero necesitas inyectar un
Magento\Catalog\Model\ProductRepository
en tu constructor:Luego carga el producto según la identificación del producto:
Finalmente, puede obtener el modelo de URL para recuperar la URL reescrita:
fuente
Es posible que esto realmente no responda a la pregunta, pero es probable que, si falta la reescritura de URL, es posible que obtenga su producto de una colección de productos. Y agregar información de reescritura de URL no es automático como puede ver en
\Magento\Catalog\Model\ResourceModel\Product\Collection::$_addUrlRewrite
.La forma en que logré forzar la adición de reescrituras de URL es mediante la creación de un complemento en el
create()
método de\Magento\Catalog\Model\ResourceModel\Product\CollectionFactory
. Y tan pronto como su código (o el código central de Magento) use esta fábrica para crear una instancia de una colección de productos (y debería hacerlo a partir de las mejores prácticas), este complemento obliga a\Magento\Catalog\Model\ResourceModel\Product\Collection::$_addUrlRewrite
hacerlotrue
.Luego, las reescrituras de URL de productos se agregan con éxito a los productos sin la necesidad de hacer un bucle en ellas y volver a cargarlas. Por lo tanto, corrige la desventaja de la que habló @Raphael.
Aquí está la definición XML del complemento (en su
di.xml
archivo):Y el código del complemento:
fuente
Exporte sus productos a un archivo csv
desde el archivo csv en Excel use esta fórmula para la columna url_key
donde "P103" es la columna url_key
fuente