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>

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"}} 

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"}}

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.