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
getColumns
function. - 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
OrderDetailState
ist mit demDetail
model verknüpft. - Das Model
StateDocument
ist mit demOrderDetailState
model 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