如何在CMS页面Magento 2中调用PHTML文件?


16

Magento 2

我已经安装了从Magestore下载的示例Bannerslider模块。

当我调用bannerslider.phtmlCMS主页时,它在主页上显示了不可靠的错误。

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

错误消息是 We're sorry, an error has occurred while generating this email.

我也更改了块类,但仍然显示相同的错误。你能建议我一个正确的方法吗?

如果您需要更多代码详细信息,请在评论中提及我。我真的被困在这里。

uncoment之后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;
    }
}

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
您需要从.htaccess文件中删除SetEnv MAGE_MODE开发人员,以消除错误。
Taral Patoliya 2015年

谢谢你塔拉尔。我已经做了。现在错误消息已更改。我已经编辑了我的问题。
Praful Rajput

请告诉我您的块类和module.xml代码。
阿米特·贝拉

我添加了块类和module.xml代码来发布。
Praful Rajput

@TaralPatoliya谢谢您的建议……对我真的很有帮助!
DRAJI '16

Answers:


35

如果要在cms页面中调用phtml,请尝试在cms页面中使用以下代码。

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

21

在magento中,如果要在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

可以使用,但是会使您无法缓存
阿米特·贝拉

是的,我需要那个,使用cms的语法是什么,我用过但
没用
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.