Estoy tratando de agregar una plantilla personalizada a la página del producto en la sección de redes sociales. En mi módulo tengo el siguiente código en el archivo de diseño default.xml
<body>
<referenceContainer name="product.info.social">
<block class="Magento\Framework\View\Element\Template" name="product.info.custom" template="Lapisbard_Product::social.phtml" after="product.info.addtocart">
</block>
</referenceContainer>
</body>
contenido social.phtml
<p>Hey there !</p>
<?php //$_product = $block->getProduct();
Está funcionando bien y muestra el contenido de la plantilla en la página del producto. Cuando estoy usando la clase de bloque en Magento\Catalog\Block\Product\View
lugar de Magento\Framework\View\Element\Template
para poder usar el objeto del producto en mi plantilla $block->getProduct();
, muestra una página en blanco.
1. ¿Qué error estoy haciendo aquí?
2. ¿Cuál es la mejor manera de modificar la página del producto?
3. ¿Hay un archivo de diseño de referencia que pueda usar para agregar nuevas plantillas a cualquier sección del código de diseño de escritura de la página del producto en mi módulo?
$_product = $block->getProduct();
cuando estoy usando elMagento\Catalog\Block\Product\View
bloque.Respuestas:
El error de "página blanca" viene porque
Magento\Framework\View\Element\Template
no tiene ungetProduct()
método.Así que creo que la forma "más limpia" de hacerlo es crear un módulo personalizado con un bloque, diseño y plantilla personalizados (no se preocupe, esto solo toma unos minutos y ya ha hecho algunas partes)
Archivos del módulo:
(Saltaré
/etc/module.xml
yregistration.php
porque son triviales, sin embargo, puedes encontrar el ejemplo completo aquí ).Comencemos con el archivo Block php:
Como puede ver, es solo una clase concreta que extiende (IMO) el bloque de resumen de producto más liviano. También puede extender,
Magento\Framework\View\Element\Template
pero en ese caso deberá implementar elgetProduct()
método y cambiar el contexto en el constructor para obtener acceso al registro.Así que pasemos al archivo de diseño:
Y finalmente el archivo de plantilla:
Como puede ver es bastante sencillo, más simple que M1-
Recuerde que toda su lógica personalizada debe implementarse en la
Extra.php
clase de bloque para mantener limpia la vista.es decir:
fuente
Un suplemento para la respuesta aceptada
La respuesta aceptada es buena, pero ahora
AbstractProduct
está en desuso .Entonces, tenemos que usar el
Magento\Framework\Registry
para lograr el Bloque , la muestra del Bloque está a continuación:fuente