Hallo Leute!
Ich möchte die Bestellübersicht um ein eigenes Feld erweitern. Der Wert des Feldes soll dabei aus einem eigenem Model geladen werden. Die Darstellung einer neuen Spalte ist mir bisher schon einmal geklückt nun fehlt noch der korrekte Wert darin:
Es handelt sich um die Spalte “Download PDF” in welcher der Wert “URL goes here…” hinterlegt wurde.
Das Ganze funktioniert so:
- Backend Subscriber registriert die Pfade zu den Views welche ich überschreibe.
- In den Views registriere ich eine neue Spalte
getColumnsfunction. - Danach wird der Snippet noch zur Verfügung gestellt.
- Es gibt im Moment noch keinen Controller.
- Keine Storages oder Models wurden registriert.
Hier noch ein wenig Code hierzu:
Subscriber/BackendSubscriber.php
public static function getSubscribedEvents()
{
return [
'Enlight_Controller_Action_PostDispatch_Backend_Order' => 'onOrderPostDispatch'
];
}
public function onOrderPostDispatch(\Enlight_Event_EventArgs $arguments)
{
/** @var \Shopware_Controllers_Backend_Order $controller */
$controller = $arguments->getSubject();
$view = $controller->View();
$request = $controller->Request();
if ($request->getActionName() === 'load') {
$view->extendsTemplate(
'backend/cc_extend_order_detail/view/detail/position.js'
);
$view->extendsTemplate(
'backend/cc_extend_order_detail/view/list/position.js'
);
}
}
Resources/views/backend/cc_extend_order_detail/view/list/position.js
//{namespace name=backend/order/main}
//{block name="backend/order/view/list/position"}
// {$smarty.block.parent}
Ext.define('Shopware.apps.CcExtendOrderDetail.view.list.Position', {
override:'Shopware.apps.Order.view.list.Position',
snippets: {
// ...
// additional snippets...
downloadPdf: '{s name=column/download_pdf}Download PDF{/s}',
},
});
//{/block}
Resources/views/backend/cc_extend_order_detail/view/detail/position.js
//{namespace name=backend/order/main}
//{block name="backend/order/view/detail/position"}
// {$smarty.block.parent}
Ext.define('Shopware.apps.CcExtendOrderDetail.view.detail.Position', {
override:'Shopware.apps.Order.view.detail.Position',
getColumns:function (grid) {
// ...
return [
// ...
{
header: grid.snippets.downloadPdf,
dataIndex: 'inStock',
flex:1,
renderer: function(value, metaData, record) {
return 'url goes here...';
}
},
// ....
];
},
});
//{/block}
Und nun zur Datenstruktur:
- Das Model
OrderDetailStateist mit demDetailmodel verknüpft. - Das Model
StateDocumentist mit demOrderDetailStatemodel verknüpft.
Hier ein kurzes Beispiel wie man mithilfe des ModelManagers auf den Wert zugreifen könnte:
$orderDetailId = 1;
$orderDetailState = $this->modelManager
->getRepository(OrderDetailState::class)
->findOneBy([
'orderDetail' => $orderDetailId,
]);
$downloadUrl = $this->modelManager
->getRepository(StateDocument::class)
->findOneBy([
'editorState' => $orderDetailState->getEditorState(),
]);
$downloadUrl = $downloadUrl->getDownloadUrl();
Wie kann ich nun diese PDF URL auslesen und in meiner View darstellen?
Ich bin für alle Vorschläge offen und Danke Euch für die investiererte Zeit.
Gruss
Alexander
