2017-11-16 4 views
0

Ich habe ein Modul mit einem benutzerdefinierten Widget erstellt. Wenn Sie sich beim Administrator anmelden, content->widgets aufrufen, eine Instanz erstellen und festlegen, dass diese Instanz auf der Startseite angezeigt wird, wird das Widget erwartungsgemäß angezeigt.Magento2 Custom Widget nicht angezeigt

Ich habe diese Instanz entfernt, und jetzt versuche das Widget zu erstellen, indem Sie auf content->pages gehen, die Bearbeitung der homepage -> content Abschnitt und insert widget auswählen. Ich habe eine neue Instanz des Widgets erstellt und einige zusätzliche text in den Abschnitt homepage -> content hinzugefügt.

Wenn ich die Homepage lade, erscheint das Widget nicht, obwohl der Rest der text erscheint.

Der Block für das Widget wird aufgerufen (Ich habe dies mit einer var_dump und 10 getestet).

Die Vorlage wird jedoch nicht gerendert.

Hier ist mein Block:

<?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'); 
    } 
} 

und meine Vorlage:

<?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 ?> 

Die anderen Dateien in meinem Modul sind:

etc/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 und registration.p HP.

Ich habe keine etc/layout.xml Datei, wie ich bemerkt habe einige Widget/Module enthalten. Brauche ich das oder andere Dateien?

Auch, wenn ich in content->pages->edit->content "um den Editor ausblenden" Ich sehe:

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

Wenn ich ersetzen diese mit

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

Der Inhalt als

Antwort

0

I zu erhalten verwaltet erwartet erscheint der Block zu rendern

Ich musste implements \Magento\Widget\Block\BlockInterface hinzufügen zu MyNamespace\Slider\Block\Widget\Slider.

Ich bin mir nicht sicher, warum dies gerendert, vor dem Hinzufügen der implements, mit dem ersten Ansatz und nicht die zweite.

Magento ist ernsthaft Dokumentation fehlt!

Verwandte Themen