Comment appeler un fichier PHTML dans une page CMS Magento 2?

16

Magento 2

J'ai installé un exemple de module Bannerslider téléchargé depuis Magestore.

Lorsque j'appelle bannerslider.phtmlsur la page d'accueil de CMS, cela montre une erreur non fiable sur la page d'accueil.

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

Le message d'erreur est We're sorry, an error has occurred while generating this email.

J'ai également changé la classe de bloc, toujours avec la même erreur. Pouvez-vous s'il vous plaît me suggérer une bonne façon?

Si vous avez besoin de plus de détails sur le code, veuillez me mentionner en commentaire. Je suis vraiment coincé ici.

Après uncoment SetEnv MAGE_MODE developerdans .htaccessle message d'erreur de fichier en cours de modification et d'affichage

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

Par ailleurs, la section admin de ce module fonctionne bien.

Classe de bloc

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
la source
3
vous devez supprimer le développeur SetEnv MAGE_MODE du fichier .htaccess pour éliminer l'erreur.
Taral Patoliya
Merci Taral. Je l'ai fait. Maintenant, le message d'erreur a été modifié. J'ai édité ma question maintenant.
Praful Rajput
Veuillez me montrer votre classe de bloc et votre code module.xml.
Amit Bera
J'avais ajouté la classe de bloc et le code module.xml à publier.
Praful Rajput
@TaralPatoliya Merci pour votre suggestion ... Cela m'a vraiment aidé!
DRAJI

Réponses:

35

Essayez ci-dessous le code dans la page cms, si vous voulez appeler phtml avec dans la page cms.

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

Dans magento, si vous souhaitez ajouter une classe de bloc dans la page cms, vous pouvez passer sous le code

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

La formule est:

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

Bloc par défaut:

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

Ceci est égal au code de version de Magento 1.X

{{ block type="core/template" template="YourtemplateFileLocation.phtml"}}
Amit Bera
la source
salut @Amit, pouvons-nous utiliser cacheable = "false" ici? lorsqu'il est utilisé en cms
jafar pinjar
Peut être utilisé mais il vous fait rendre non Cacheable
Amit Bera
Oui, j'ai besoin de celui-là, quelle est la syntaxe de l'utilisation de cms, je l'ai utilisé mais cela n'a pas fonctionné
jafar pinjar