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