Wie kann ich die Gutschein-Liste überladen ('Shopware.apps.Voucher.view.voucher.List')?

Hallo,

über ein Plugin will ich in die Möglichkeit schaffen, Partnern (Affiliates) bestimmte Gutscheine (Voucher) zuzuordnen. Soweit klappt das auch gut.

Jetzt hänge ich allerdings in der anderen Richtung fest, nämlich mit der Liste der zugeordneten Gutscheine in der Detail-Darstellung der Partner.

Mein Lösungsansatz sieht so aus:

Subscriber.php

   public function onEnlightControllerActionPostDispatchBackendPartner(\Enlight_Controller_ActionEventArgs $args){
        $controller = $args->getSubject();

        $view = $controller->View();
        $request = $controller->Request();
        
        $actName = $request->getActionName();

        $view->addTemplateDir( $this->pluginDirectory . '/Resources/views/' );
        $tpath = 'backend/affiliate_voucher_list/';
        
        if( 'index' == $actName ) {
            $view->extendsTemplate( $tpath . 'app.js');
            
        } else
        if( 'load' == $actName ) {
            $view->extendsTemplate( $tpath . 'partner/view/detail/voucher_list.js');
            $view->extendsTemplate( $tpath . 'partner/view/detail/detail.js');
        }
    }

 

backend/affiliate_voucher_list/app.js

//{block name="backend/affiliate_voucher_list/app"}
Ext.define('Shopware.apps.AffiliateVoucherList', {
    extend: 'Enlight.app.SubApplication'

   // Was muss denn hier passieren?

});
//{/block}

 

backend/affiliate_voucher_list/view/detail/voucher_list.js

//{block name="backend/voucher/view/voucher/list"}
// {$smarty.block.parent}
Ext.define('Shopware.apps.AffiliateVoucherList.partner.view.detail.VoucherList', {
    override: 'Shopware.apps.Voucher.view.voucher.List',

    initComponent:function () {
        var me = this;

        debugger;
        
        me.callParent(arguments);
    },


});
//{/block}

backend/affiliate_voucher_list/view/detail/detail.js

/**
 * Shopware UI - Partner detail main window.
 *
 * Displays all Detail Partner Information
 */

// 
//{block name="backend/partner/view/partner/detail"}
// {$smarty.block.parent}
Ext.define('Shopware.apps.AffiliateVoucherList.partner.view.detail.Detail', {
    override: 'Shopware.apps.Partner.view.partner.Detail',
    alias: 'widget.partner-voucher-list',
    
    
    /**
     * Initialize the Shopware.apps.Partner.view.partner.detail and defines the necessary
     * default configuration
     */
    initComponent:function () {
        var me = this;
        
        me.callParent(arguments);
        me.voucherFieldset = Ext.create('Ext.form.FieldSet', {
            title:'{s name=detail_general/field_set/voucher_information}Allocated vouchers{/s}',
            bodyPadding: 10,
            layout: 'column',
            defaults: {
                columnWidth: 1
            },
            items:me.createVoucherList()
        });

        me.items.insert(2, me.voucherFieldset);
    },

    
    createVoucherList:function () {
        var me = this;

        debugger;

// var voucherField = Ext.create('Shopware.apps.Voucher.view.voucher.List', {
        var voucherField = Ext.create('Shopware.apps.AffiliateVoucherList.partner.view.detail.VoucherList', {
            name: 'vouchers',
            height: 130
        });        

        return [voucherField];
    },

});
//{/block}

Und hier komme ich nicht weiter:

Wenn ich ‘Shopware.apps.Voucher.view.voucher.List’, also das “Original” erzeuge, dann erhalte ich in dem Fenster zwar an der richtigen Stelle die erwartete Liste, aber die ist leer.

Wenn ich ‘Shopware.apps.AffiliateVoucherList.partner.view.detail.VoucherList’ erzeugen will, dann bekomme ich den Fehler

[15-Aug-2020 22:57:20 Europe/Berlin] PHP Fatal error: Uncaught SmartyException: Unable to load template snippet 'backend/affiliate_voucher_list/app.js' in /dev/trunk/50_source/50_sw/engine/Library/Smarty/sysplugins/smarty_internal_templatebase.php:127
Stack trace:
#0 /dev/trunk/50_source/50_sw/engine/Library/Enlight/View/Default.php(295): Smarty_Internal_TemplateBase->fetch()
#1 /dev/trunk/50_source/50_sw/engine/Library/Enlight/Controller/Plugins/ViewRenderer/Bootstrap.php(212): Enlight_View_Default->render(Object(Enlight_Template_Default))
#2 /dev/trunk/50_source/50_sw/engine/Library/Enlight/Controller/Plugins/ViewRenderer/Bootstrap.php(238): Enlight_Controller_Plugins_ViewRenderer_Bootstrap->renderTemplate(Object(Enlight_Template_Default))
#3 /dev/trunk/50 in /dev/trunk/50_source/50_sw/engine/Library/Smarty/sysplugins/smarty_internal_templatebase.php on line 127

[15-Aug-2020 22:57:20 Europe/Berlin] PHP Fatal error: Uncaught Enlight_Controller_Exception: Action "Backend_AffiliateVoucherList_partnerAction" not found failure for request url http://localhost/shopware/backend/AffiliateVoucherList/partner/view/detail/VoucherList?file=app&no-cache=1597524911+1+1 in /dev/trunk/50_source/50_sw/engine/Library/Enlight/Controller/Action.php:124
Stack trace:
#0 /dev/trunk/50_source/50_sw/engine/Library/Enlight/Controller/Action.php(192): Enlight_Controller_Action->__call('partnerAction', Array)
#1 /dev/trunk/50_source/50_sw/engine/Library/Enlight/Controller/Dispatcher/Default.php(478): Enlight_Controller_Action->dispatch('partnerAction')
#2 /dev/trunk/50_source/50_sw/engine/Library/Enlight/Controller/Front.php(228): Enlight_Controller_Dispatcher_Default->dispatch(Object(Enlight in /dev/trunk/50_source/50_sw/engine/Library/Enlight/Controller/Action.php on line 124

Ich kann im Controller zwar eine Funktion “partnerAction” einbauen und die wird auch aufgerufen. Mir ist nur nicht klar, wie der Aufruf zustande kommt und was diese Funktion tun soll…
Die Funktion “getVoucherAction” hingegen wird nicht aufgerufen, was jedoch vermutlich dem grundsätzlichen Fehler geschuldet ist.

Ausserdem fehlt mit Sicherheit in der backend/affiliate_voucher_list/app.js noch etwas, oder?

Kann mir jemand helfen? Vielen Dank schon mal!!

Deine Komponente sind vor dem verwenden noch nicht verfügbar, deshalb der fehler

Du solltest die Komponenten nicht wiederverwenden die für andere UIs gedacht sind. Bau dir hier am besten eigene.

 

In der app.js definierst du alle Abhängigkeiten des Modules