Como chamar um arquivo PHTML dentro de uma página do CMS Magento 2?

16

Magento 2

Instalei o módulo Bannerslider de amostra baixado do Magestore.

Quando ligo bannerslider.phtmlpara a Página inicial do CMS, ele mostra um erro não confiável na página inicial.

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

Mensagem de erro é We're sorry, an error has occurred while generating this email.

Também mudei a classe de bloco, ainda mostrando o mesmo erro. Você pode me sugerir uma maneira adequada?

Se você precisar de mais detalhes sobre o código, mencione-me no comentário. Eu estou realmente preso aqui.

Após descomentado SetEnv MAGE_MODE developerno .htaccessarquivo mensagem de erro sendo alterada e mostrando

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

A propósito, a seção admin deste módulo está funcionando bem.

Classe de bloqueio

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>
Praful Rajput
fonte
3
você precisa desconectar o desenvolvedor do SetEnv MAGE_MODE do arquivo .htaccess para evitar erros.
Taral Patoliya
Obrigado Taral. Eu fiz isso. Agora a mensagem de erro foi alterada. Eu editei minha pergunta agora.
Praful Rajput
Por favor, mostre-me sua classe de bloco e o código module.xml.
Amit Bera
Eu adicionei a classe de bloco e o código module.xml para postar.
Praful Rajput
@TaralPatoliya Obrigado por sua sugestão ... Isso realmente me ajudou!
DRAJI 15/07

Respostas:

35

Tente o código abaixo na página cms, se você quiser chamar phtml com na página cms.

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

No magento, se você deseja adicionar classe de bloco na página cms, pode tre abaixo do código

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

A fórmula é:

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

Bloco padrão:

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

Isso é igual ao código da versão do Magento 1.X

{{ block type="core/template" template="YourtemplateFileLocation.phtml"}}
Amit Bera
fonte
oi @mit, podemos usar cacheable = "false" aqui? quando usado no cms
jafar pinjar, 21/03/19
Pode usar, mas isso faz você fazer não Cacheable
Amit Bera
Sim eu preciso que um, o que é a sintaxe no uso de CMS, eu usei, mas não funcionou
Jafar pinjar