CMS 페이지 Magento 2 내에서 PHTML 파일을 호출하는 방법은 무엇입니까?


16

마 젠토 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
SetEnv MAGE_MODE 개발자의 .htaccess 파일에서 오류를 제거해야합니다.
— Taral Patoliya

타랄 감사합니다. 내가 해냈어 이제 오류 메시지가 변경되었습니다. 지금 내 질문을 편집했습니다.
— Praful Rajput

블록 클래스와 module.xml 코드를 보여주세요.
— Amit Bera

게시 할 블록 클래스와 module.xml 코드를 추가했습니다.
— Praful 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를 사용할 때
— 자파르 pinjar

사용할 수는 있지만 캐시 할 수 없게 만듭니다
— Amit Bera

네, 저것이 필요합니다. cms를 사용하는 구문은 무엇입니까?하지만 그것을 사용하지 못했습니다.
— jafar pinjar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.