Wie rufe ich eine PHTML-Datei auf einer CMS-Seite von Magento 2 auf?

16

Magento 2

Ich habe ein Beispiel-Bannerslider-Modul installiert, das von Magestore heruntergeladen wurde.

Wenn ich die bannerslider.phtmlCMS-Homepage aufrufe, wird auf der Homepage ein unzuverlässiger Fehler angezeigt.

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

Fehlermeldung ist We're sorry, an error has occurred while generating this email.

Ich habe auch die Blockklasse geändert, aber sie zeigt immer noch den gleichen Fehler. Können Sie mir bitte einen geeigneten Weg vorschlagen?

Wenn Sie weitere Codedetails benötigen, erwähnen Sie mich bitte im Kommentar. Ich stecke hier wirklich fest.

Nach uncoment SetEnv MAGE_MODE developerin .htaccessDatei Fehlermeldung ändern und mehr zeigt

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

Übrigens, der Admin-Bereich dieses Moduls funktioniert einwandfrei.

Klasse blockieren

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
quelle
3
Sie müssen den SetEnv MAGE_MODE-Entwickler aus der .htaccess-Datei entfernen, um Fehler zu beseitigen.
Taral Patoliya
Vielen Dank, dass Sie Taral. Ich habe es getan. Jetzt wurde die Fehlermeldung geändert. Ich habe meine Frage jetzt bearbeitet.
Praful Rajput
Bitte zeigen Sie mir Ihre Blockklasse und Ihren module.xml-Code.
Amit Bera
Ich hatte Blockklasse und module.xml-Code zum Posten hinzugefügt.
Praful Rajput
@ TaralPatoliya Vielen Dank für Ihren Vorschlag ... Es hat mir sehr geholfen!
DRAJI

Antworten:

35

Versuchen Sie den folgenden Code in cms page, wenn Sie mit in cms page phtml aufrufen möchten.

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

Wenn Sie in Magento eine Blockklasse in eine CMS-Seite einfügen möchten, können Sie den folgenden Code eingeben

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

Die Formel lautet:

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

Standardblock:

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

Dies entspricht dem Magento 1.X-Versionscode

{{ block type="core/template" template="YourtemplateFileLocation.phtml"}}
Amit Bera
quelle
hi @Amit, können wir hier cacheable = "false" verwenden? bei
verwendung in cms
Kann verwenden, aber es macht Sie nicht zwischenspeicherbar
Amit Bera
Ja, ich brauche das, was ist die Syntax bei der Verwendung von cms, ich habe es verwendet, aber es hat nicht funktioniert
jafar pinjar