¿Cómo llamar a un archivo PHTML dentro de una página CMS Magento 2?

16

Magento 2

He instalado un módulo de muestra Bannerslider descargado de Magestore.

Cuando llamo bannerslider.phtmla la página de inicio de CMS, muestra un error poco confiable en la página de inicio.

{{block class="Magento\Bannerslider\Block\Slideshow" template="bannerslider.phtml"}}

Mensaje de error es We're sorry, an error has occurred while generating this email.

También cambié la clase de bloque, todavía muestra el mismo error. ¿Me puede sugerir una forma adecuada?

Si necesita más detalles sobre el código, por favor, mencione mi comentario. Estoy realmente atrapado aquí.

Después de uncoment SetEnv MAGE_MODE developeren el .htaccessarchivo, el mensaje de error se cambia y muestra

Error filtering template: Invalid block type: Magento\Bannerslider\Block\Slideshow

Por cierto, la sección de administración de este módulo funciona bien.

Clase de bloque

namespace Magento\Bannerslider\Block;
use Magento\Framework\View\Element\Template;
use Magento\Framework\View\Element\Template\Context;
use Magento\Framework\Filesystem;
use Magento\Framework\App\Filesystem\DirectoryList;
class Slideshow extends Template
{
    public function __construct(
        Context $context,
        \Magento\Bannerslider\Model\BannerFactory $bannerFactory,
        \Magento\Framework\Filesystem $fileSystem,
        \Magento\Framework\StoreManagerInterface $storeManager,
        array $data = array()
    ) {
        $this->_fileSystem = $fileSystem;
        $this->_bannerFactory = $bannerFactory;
        $this->_storeManager = $storeManager;
        parent::__construct($context, $data);
    }
    public function _prepareLayout()
    {
        return parent::_prepareLayout();
    }
    public function getBaseJs($fileName){

        return $this->_storeManager->getStore()->getBaseUrl(
                \Magento\Framework\UrlInterface::URL_TYPE_MEDIA
            ).'bannerslider/js/'.$fileName;
    }
    public function getBannerData(){
        $banners = $this->_bannerFactory->create()
                        ->getCollection()
                        ->addFieldToFilter('status',1);
        foreach ($banners as $banner){
                $result['banners'][] = $banner->getData();
        }
        return $result;
    }
    public function getBannerImage($imageName) {

        $mediaDirectory = $this->_storeManager->getStore()->getBaseUrl(
                \Magento\Framework\UrlInterface::URL_TYPE_MEDIA
            );
        return $mediaDirectory.'bannerslider/images'.$imageName;
    }
}

Module.xml

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/Module/etc/module.xsd">
    <module name="Magento_Bannerslider" setup_version="1.0.0"/>
</config>
Rajput orante
fuente
3
necesita uncoment el desarrollador SetEnv MAGE_MODE del archivo .htaccess para eloborar el error.
Taral Patoliya
Gracias Taral Lo he hecho. Ahora el mensaje de error ha sido cambiado. He editado mi pregunta ahora.
Praput Rajput
Muéstrame tu clase de bloque y el código module.xml.
Amit Bera
Agregué la clase de bloque y el código module.xml para publicar.
Praput Rajput
@TaralPatoliya Gracias por su sugerencia ... ¡Realmente me ayudó!
DRAJI

Respuestas:

35

Pruebe el siguiente código en la página cms, si desea llamar a phtml con en la página cms.

{{block class="Magento\Bannerslider\Block\Slideshow" template="Magento_Bannerslider::bannerslider.phtml"}} 
Keyur Shah
fuente
21

En magento, si desea agregar una clase de bloque en la página de cms, puede ir debajo del código

{{block class="Magento\Bannerslider\Block\Slideshow" template="Magento_Bannerslider::bannerslider.phtml"}} 

La fórmula es:

{{block class="[BlockClassFullName]" template="[VendorName]_[ModuleName]::[YourTemplateFileLocation].phtml"}} 

Bloque predeterminado:

{{block class="Magento\Framework\View\Element\Template" template="[VendorName]_[ModuleName]::[YourTemplateFileLocation].phtml"}} 

Esto es igual al código de versión de Magento 1.X

{{ block type="core/template" template="YourtemplateFileLocation.phtml"}}
Amit Bera
fuente
hola @Amit, ¿podemos usar cacheable = "false" aquí? cuando se usa en cms
jafar pinjar
Se puede usar pero hace que no se pueda almacenar en caché
Amit Bera
Sí necesito que uno, ¿cuál es la sintaxis en el uso de CMS, lo usé, pero no funcionó
Jafar Pinjar