Як викликати файл PHTML на сторінці CMS Magento 2?


16

Magento 2

Я встановив зразок модуля Bannerslider, завантажений з Magestore.

Коли я заходжу bannerslider.phtmlна домашню сторінку CMS, вона показує ненадійну помилку на домашній сторінці.

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

Повідомлення про помилку є We're sorry, an error has occurred while generating this email.

Я також змінив клас блоків, але він все одно показує таку ж помилку. Чи можете ви, будь ласка, підказати мені правильний спосіб?

Якщо вам потрібна додаткова детальна інформація про код, будь ласка, згадайте мене у коментарі. Я справді застряг тут.

Після відсутності SetEnv MAGE_MODE developerу .htaccessфайлі повідомлення про помилку змінюється та показується

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

До речі, розділ адміністратора цього модуля працює чудово.

Блок-клас

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

Модуль.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
вам потрібно відклеїти розробник SetEnv MAGE_MODE від файлу .htaccess, щоб розробити помилку.
Тарал Патолія

Дякую, Тарале. Я зробив це. Тепер повідомлення про помилку було змінено. Я зараз відредагував своє запитання.
Молебний Раджпут

Будь ласка, покажіть мені свій клас блоку та код module.xml
Аміт Бера

Я додав код блоку class та module.xml для публікації.
Похвальний Раджпут

@TaralPatoliya Дякую за пропозицію ... Мені це справді допомогло!
DRAJI

Відповіді:


35

Спробуйте нижче код на сторінці cms, Якщо ви хочете зателефонувати на phtml з на сторінці cms.

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

21

У Магенто, якщо ви хочете додати клас блоку на сторінку cms, то ви можете понижувати код нижче

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

Формула така:

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

Блок за замовчуванням:

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

Це дорівнює коду версії Magento 1.X

{{ block type="core/template" template="YourtemplateFileLocation.phtml"}}

привіт @Amit, чи можемо ми тут використовувати cacheable = "false"? коли використовується у cms
jafar pinjar

Можна використовувати, але це робить вас неможливим кешувати
Amit Bera

Так, мені потрібен той, який синтаксис використовує cms, я використовував його, але це не спрацювало
jafar pinjar
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.