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