จะเรียกไฟล์ PHTML ภายในหน้า CMS Magento 2 ได้อย่างไร?


16

วีโอไอพี 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;
    }
}

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
คุณต้องยกเลิกการพัฒนา SetEnv MAGE_MODE จากไฟล์. htaccess เพื่อแก้ไขข้อผิดพลาด
Taral Patoliya

ขอบคุณ Taral ฉันทำไปแล้ว ข้อความแสดงข้อผิดพลาดขณะนี้มีการเปลี่ยนแปลง ฉันได้แก้ไขคำถามของฉันตอนนี้
Rajput น่ายกย่อง

โปรดแสดงคลาสบล็อกและรหัส module.xml ให้ฉันด้วย
Amit Bera

ฉันได้เพิ่มบล็อกคลาสและรหัส module.xml ลงรายการบัญชี
Rajput น่ายกย่อง

@TaralPatoliya ขอบคุณสำหรับคำแนะนำของคุณ ... มันช่วยฉันได้จริงๆ!
DRAJI

คำตอบ:


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

สามารถใช้ได้ แต่มันทำให้คุณไม่สามารถแคชได้
Amit Bera

ใช่ฉันต้องการสิ่งนั้นคืออะไรไวยากรณ์ในการใช้งาน cms ฉันใช้มัน แต่มันใช้งานไม่ได้
jafar pinjar
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.