2017-12-22 14 views
0

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.

Antwort

0

In Ihrem VimeoComponentHandler sieht es aus wie Sie die ComponentHandlerInterface importieren vergessen:

<?php 

namespace MyPluginName\ComponentHandler; 

// Add following line 
use Shopware\Bundle\EmotionBundle\ComponentHandler\ComponentHandlerInterface; 


class VimeoComponentHandler implements ComponentHandlerInterface 
{ 
    // ... 
} 

?>