2017-11-16 3 views
0

カスタムウィジェットでモジュールを作成しました。管理者にログインしてcontent->widgetsにアクセスし、インスタンスを作成し、そのインスタンスをホームページに表示するように設定すると、ウィジェットは期待どおりに表示されます。Magento2カスタムウィジェットが表示されない

このインスタンスを削除しました。content->pagesに行き、homepage -> contentセクションを編集し、insert widgetを選択してウィジェットを作成しようとしています。ウィジェットの新しいインスタンスを作成し、homepage -> contentセクションに追加のtextを追加しました。

ホームページを読み込むと、textの残りの部分が表示されますが、ウィジェットは表示されません。

ウィジェットのブロックが呼び出されています(私はこれをvar_dumpexitでテストしました)。

ただし、テンプレートはレンダリングされません。ここで

は私のブロックです:

<?php 

namespace MyNamespace\Slider\Block\Widget; 

use Magento\Framework\View\Element\Template; 
use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory; 
use Magento\Catalog\Block\Product\Context; 

class Slider extends Template 
{ 
    protected $_template = "Yamazaki_Slider::widget/slider.phtml"; 

    /** 
    * @var CollectionFactory 
    */ 
    protected $_productCollectionFactory; 

    /** 
    * @var CollectionFactory 
    */ 
    protected $_imageHelper; 

    /** 
    * @param Context $context 
    * @param CollectionFactory $productCollectionFactory 
    */ 
    public function __construct(Context $context, CollectionFactory $productCollectionFactory) 
    { 
     $this->_imageHelper = $context->getImageHelper(); 
     $this->_productCollectionFactory = $productCollectionFactory; 
     parent::__construct($context); 
    } 

    /** 
    * Retrieve featured products collection 
    */ 
    public function getProducts() 
    { 
     $collection = $this->_productCollectionFactory->create(); 
     return $collection->addAttributeToSelect('*')->addAttributeToFilter('is_featured','1'); 
    } 
} 

と私のテンプレート:

<?php $imageBlock = $block->getLayout()->createBlock('Magento\Catalog\Block\Product\ListProduct'); ?> 

<?php foreach($this->getProducts() as $product): ?> 
    <?php $productImage = $imageBlock->getImage($product, 'product_page_image_large'); ?> 
    <?php echo $productImage->toHtml(); ?> 
<?php endforeach ?> 

私のモジュール内の他のファイルは、次のとおりです。

など/ widget.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<widgets xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Widget:etc/widget.xsd"> 
<widget id="yamazaki_slider" class="MyNamespace\Slider\Block\Widget\Slider"> 
    <label translate="true">My Image Slider</label> 
    <description>My Image Slider</description> 
</widget> 
</widgets> 

module.xmlとregistration.p hp。

ウィジェット/モジュールに含まれていることに気づいたので、私はetc/layout.xmlファイルを持っていません。これ、または他のファイルが必要ですか?私はcontent->pages->edit->content内部「エディタを隠す」場合

また、私は次を参照してください。

<p>{{widget type="MyNamespace\Slider\Block\Widget\Slider"}}</p>` 

私はコンテンツが、私は得ることができた

答えて

0

を期待通りに表示されます

{{block class="MyNamespace\Slider\Block\Widget\Slider" template="widget/slider.phtml"}} 

でこれを交換した場合ブロックレンダリング

私はimplements \Magento\Widget\Block\BlockInterfaceを追加しなければならなかったMyNamespace\Slider\Block\Widget\Slider

implementsを追加する前に、これがなぜレンダリングされたのかわかりません。第1のアプローチではなく、第2のアプローチを使用します。

Magentoには深刻な文書がありません!

関連する問題