Jak wywołać plik PHTML na stronie CMS Magento 2?

16

Magento 2

Zainstalowałem przykładowy moduł Bannerslider pobrany z Magestore.

Kiedy dzwonię bannerslider.phtmldo strony głównej CMS, na stronie głównej pojawia się niewiarygodny błąd.

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

Komunikat o błędzie to We're sorry, an error has occurred while generating this email.

Zmieniłem także klasę bloków, wciąż pokazując ten sam błąd. Czy możesz mi zasugerować właściwy sposób?

Jeśli potrzebujesz więcej szczegółów kodu, proszę wspomnieć o mnie w komentarzu. Naprawdę utknąłem tutaj.

Po niepowodzeniu SetEnv MAGE_MODE developerw .htaccesspliku komunikat o błędzie jest zmieniany i wyświetlany

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

Nawiasem mówiąc, sekcja administracyjna tego modułu działa dobrze.

Blokuj klasę

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
źródło
3
musisz usunąć programistę SetEnv MAGE_MODE z pliku .htaccess, aby opracować błąd.
Taral Patoliya
Dziękuję Taral. Zrobiłem to. Teraz komunikat o błędzie został zmieniony. Zredagowałem teraz moje pytanie.
Praful Rajput
Pokaż mi swoją klasę bloków i kod module.xml.
Amit Bera
Do postu dodałem kod klasy blokowej i kod module.xml.
Praful Rajput
@TaralPatoliya Dziękuję za sugestię ... To naprawdę pomogło mi!
DRAJI

Odpowiedzi:

35

Wypróbuj poniższy kod na stronie cms, jeśli chcesz wywołać phtml ze stroną cms.

{{block class="Magento\Bannerslider\Block\Slideshow" template="Magento_Bannerslider::bannerslider.phtml"}} 
Keyur Shah
źródło
21

W magento, jeśli chcesz dodać klasę bloków na stronie cms, możesz przejść poniżej kodu

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

Formula to:

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

Domyślny blok:

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

Jest to równe kodowi wersji Magento 1.X

{{ block type="core/template" template="YourtemplateFileLocation.phtml"}}
Amit Bera
źródło
cześć @Amit, czy możemy tutaj użyć cacheable = "false"? przy użyciu w cms
jafar pinjar
Można używać, ale powoduje, że nie można buforować
Amit Bera
Tak, potrzebuję tego, jaka jest składnia przy użyciu cms, użyłem go, ale to nie działało
jafar pinjar