Come chiamare un file PHTML all'interno di una pagina CMS Magento 2?


16

Magento 2

Ho installato il modulo Bannerslider di esempio scaricato da Magestore.

Quando chiamo bannerslider.phtmlnella Home Page di CMS, mostra un errore inaffidabile sulla home page.

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

Il messaggio di errore è We're sorry, an error has occurred while generating this email.

Ho cambiato anche la classe di blocco, mostrando comunque lo stesso errore. Potete per favore suggerirmi un modo corretto?

Se hai bisogno di ulteriori dettagli sul codice, ti prego di menzionarmi nel commento. Sono davvero bloccato qui.

Dopo insolenti SetEnv MAGE_MODE developernel .htaccessmessaggio di errore del file che viene modificato e visualizzato

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

A proposito, la sezione admin di questo modulo funziona bene.

Classe di blocco

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>

3
è necessario decomprimere lo sviluppatore SetAGE MAGE_MODE dal file .htaccess per eliminare l'errore.
Taral Patoliya,

Grazie Taral. L'ho fatto. Ora il messaggio di errore è stato modificato. Ho modificato la mia domanda ora.
Praful Rajput,

Mostrami la tua classe di blocco e il codice module.xml.
Amit Bera

Avevo aggiunto classe di blocco e codice module.xml per postare.
Praful Rajput,

@TaralPatoliya Grazie per il tuo suggerimento ... Mi ha davvero aiutato!
DRAJI,

Risposte:


35

Prova sotto il codice nella pagina cms, se vuoi chiamare phtml con nella pagina cms.

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

21

In magento, se si desidera aggiungere la classe di blocco nella pagina cms, è possibile tre sotto il codice

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

La formula è:

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

Blocco predefinito:

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

Questo è uguale al codice versione Magento 1.X.

{{ block type="core/template" template="YourtemplateFileLocation.phtml"}}

ciao @Amit, possiamo usare cacheable = "false" qui? se usato in cms
jafar pinjar

Può usare ma ti rende non memorizzabile nella cache
Amit Bera

Sì, ne ho bisogno, qual è la sintassi nell'uso di cms, l'ho usato ma non ha funzionato
jafar pinjar
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.