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.