Bagaimana cara memanggil file PHTML dalam halaman CMS Magento 2?

16

Magento 2

Saya telah menginstal sampel modul Bannerslider yang diunduh dari Magestore.

Ketika saya menelepon bannerslider.phtmlke Halaman Utama CMS, itu menunjukkan kesalahan tidak dapat diandalkan di halaman rumah.

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

Pesan kesalahan adalah We're sorry, an error has occurred while generating this email.

Saya mengubah kelas blok juga, masih menunjukkan kesalahan yang sama. Bisakah Anda menyarankan saya cara yang tepat?

Jika Anda membutuhkan detail kode lebih lanjut, Tolong sebutkan saya dalam komentar. Saya benar-benar terjebak di sini.

Setelah uncoment SetEnv MAGE_MODE developerdalam .htaccesspesan kesalahan file diubah dan ditampilkan

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

Ngomong-ngomong, admin bagian dari modul ini berfungsi dengan baik.

Blokir kelas

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
sumber
3
Anda perlu membatalkan SetEnv MAGE_MODE pengembang dari file .htaccess untuk mengurangi kesalahan.
Taral Patoliya
Taral terima kasih. Saya telah selesai melakukannya. Sekarang pesan kesalahan telah diubah. Saya telah mengedit pertanyaan saya sekarang.
Praful Rajput
Tolong tunjukkan padaku kelas blok dan kode module.xml Anda.
Amit Bera
Saya telah menambahkan kode blok class dan module.xml ke posting.
Praful Rajput
@ TaralPatoliya Terima kasih atas saran Anda ... Ini sangat membantu saya!
DRAJI

Jawaban:

35

Coba kode di bawah ini di halaman cms, Jika Anda ingin memanggil phtml dengan halaman cms.

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

Di magento, jika Anda ingin menambahkan kelas blok di halaman cms, maka Anda dapat menggunakan kode di bawah ini

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

Formula adalah:

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

Blok default:

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

Ini sama dengan kode versi Magento 1.X

{{ block type="core/template" template="YourtemplateFileLocation.phtml"}}
Amit Bera
sumber
hai @Amit, bisakah kita menggunakan cacheable = "false" di sini? bila digunakan dalam cms
jafar pinjar
Dapat digunakan tetapi itu membuat Anda membuat non Cacheable
Amit Bera
Ya saya membutuhkan yang itu, apa sintaks dalam menggunakan cms, saya menggunakannya tetapi tidak berhasil
jafar pinjar