Ich bin auf dem Weg, ein Shopware 5 Shoppingworld Element zu entwickeln. Mein Plan ist, dass der Benutzer eine Kategorie aus einer Dropdown-Box auswählen kann. Das funktioniert soweit. Ich erzeugen, um die Dropdown-Box mit dem folgenden Code:Shopware Modify Shopping World Element Konfigurationsdaten für Front-End
$vimeoElement->createComboBoxField([
'name' => 'category_selection',
'fieldLabel' => 'Kategorie-Auswahl',
'allowBlank' => true,
'valueField' => 'id',
'displayField' => 'name',
'store' => 'Shopware.apps.Emotion.store.CategoryPath',
]);
Mein Problem ist, dass ich alle Informationen zu dieser Kategorie benötigen (Link, Beschreibung etc.) in meiner Front-End-Vorlage, aber ich nur die ID bekommen.
Ich suchte in der Shopware-Dokumentation und fand heraus, dass ich einen ComponentHandler verwenden muss, um meine Daten vorzubereiten, bevor sie an das Front-End übergeben würden.
ich dieses Tutorial gefolgt: https://developers.shopware.com/developers-guide/custom-shopping-world-elements/#process-the-element-data-before-output
ich in /custom/plugins/MyPluginName/ComponentHandler/VimeoComponentHandler.php
Und hinzugefügt, um den folgenden Code eine Datei erstellt:
<?php
namespace MyPluginName\ComponentHandler;
class VimeoComponentHandler implements ComponentHandlerInterface
{
public function supports(Element $element)
{
return true;
// return $element->getComponent()->getTemplate() === 'emotion_vimeo';
}
public function prepare(PrepareDataCollection $collection, Element $element, ShopContextInterface $context)
{
// do some prepare logic, e.g. requesting articles for rendering
}
public function handle(ResolvedDataCollection $collection, Element $element, ShopContextInterface $context)
{
// do some handle logic and fill the element data, which will be available in your template
$element->getData()->set('key', 'value');
}
}
?>
Schließlich habe ich diese Zeilen zu/custom/plugins/MyPluginName/Ressourcen/services.xml:
<service id="swag_vimeo_element.vimeo_component_handler" class="MyPluginName\ComponentHandler\VimeoComponentHandler">
<tag name="shopware_emotion.component_handler"/>
</service>
Jetzt scheint es, dass mein Frontend eine neue Variable bekommen soll. Aber es tat es nicht.
In meinem Apache-Logs kann ich die folgende Fehlermeldung angezeigt:
PHP Fatal error: Interface 'MyPluginName\\ComponentHandler\\ComponentHandlerInterface' not found in C:\\xampp\\htdocs\\custom\\plugins\\MyPluginName\\ComponentHandler\\VimeoComponentHandler.php on line 6, referer: http://192.168.3.64/
Ich brauche in einer Front-End-Vorlage alle Informationen über eine Kategorie zu erhalten. Ich habe nur die Kategorie ID bekommen.