Estoy tratando de recuperar los atributos del producto actual en un bloque en Magento 2. Puedo obtener un producto, como id 1:
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$product = $objectManager->create('\Magento\Catalog\Model\ProductRepository')->getById(1);
Sin embargo, no sé cómo obtener la identificación del producto actual. ¿Cómo puedo hacer eso?
getProduct()
enMagento\Catalog\Block\Product\View
Respuestas:
Para obtener el producto actual, una de las formas recomendadas es:
Magento\Catalog\Block\Product\View\AbstractView
.$block->getProduct()
en su archivo phtml.fuente
Aunque otras respuestas son correctas, tampoco son la solución recomendada / adecuada.
El uso del ObjectManager está absolutamente prohibido en Magento 2. Por lo tanto, no confíe en esta solución, sino que utilice la DI adecuada para lograrlo. Para aprender a usar DI en Magento 2, consulte este recurso: http://devdocs.magento.com/guides/v2.0/extension-dev-guide/depend-inj.html
No es necesario extender AbstractView. Si observa la función original en AbstractView, puede ver que Magento utilizó el registro para obtener el producto. No necesita extender una clase específica para hacer esto, simplemente inyecte Magento \ Framework \ Registry en su constructor y solicite el elemento de registro "producto".
Ejemplo de código completo:
fuente
Si está utilizando Magento 2.1 o mayor, puede usar esto
helper
porque el método anterior estaba en desuso.fuente
La solución de @Wesley Vestjens también funcionó para mí. Solo asegúrese de prestar atención al modificador de acceso, ya que privado podría no ser lo que desea si está utilizando
getProduct()
su plantilla. En el ejemplo anterior funciona comogetProductName()
es el método público a utilizar.fuente
getProduct()
es privado ygetProductName()
público. En las versiones más recientes de Magento (2.2 / 2.3 y posteriores), estos métodos también se consideran obsoletos y en su lugar se deben usar los modelos de vista.