Hallo Community,
war lange auf der Suche nach eine vernünftige Lösung für die Darstellung von eigene Artikel Attributes und Freitextfelder in der Artikel-Liste. Das ganze per ExtJs zu lösen durch Erweiterung von „getColumns“ Funktion unter „\backend\article_list\view\main\grid.js“ hat mir die Spalte richtig dargestellt, jedoch wenn ich mit dem Inline-Editor den Wert verändert und gespeichert habe, wurde meine Änderung nicht übernommen. Das Problem konnte ich nicht lösen und habe nach ein andere Lösung gesucht.
Beim Laden von Artikel-Liste wird die Funktion „columnConfig“ aufgerufen, diese befindet sich unter „Controllers\Backend\ArticleList.php“. Diese Funktion liefert einen Array zurück mit Spalten die für die Artikel-Liste vorhanden sind. Anhand von diesen Array werden die Spalten mit ExtJs dynamisch erstellt. Wir haben also die Möglichkeit diesen Array vorher zu modifizieren und den Rest übernimmt ExtJs:
-
Artikel-Liste Event registrieren
‚Enlight_Controller_Action_PostDispatch_Backend_ArticleList‘ => ‚onBackendArticleListPostDispatch‘
2. Funktion „columnConfig“ abfangen
/**
* Extend template on load article list
*
* @param \Enlight_Event_EventArgs $arguments
*/
public function onBackendArticleListPostDispatch(\Enlight_Event_EventArgs $arguments)
{
/** @var $controller \Shopware_Controllers_Backend_ArticleList */
$controller = $arguments->get('subject');
$request = $controller->Request();
$view = $controller->View();
if($request->getActionName() === 'columnConfig'){
// Get column config status
$columnConfigStatus = $view->getAssign('success');
if($columnConfigStatus){
// Get column config data
$columnConfigData = $view->getAssign('data');
// Edit column config
$columnConfigData = $this->editColumnConfig($columnConfigData);
// Rewrite assign data
$view->assign('data', $columnConfigData);
}
}
}
-
Spalten anpassen
/**
-
Edit columns
-
@param $columnConfigData
-
@return mixed
*/
private function editColumnConfig($columnConfigData)
{
foreach ($columnConfigData as &$configData){
// Edit webcuTestAttribute column
if($configData[‚alias‘] == ‚Attribute_webcuTestAttribute‘){
$configData[‚show‘] = 1;
$configData[‚editable‘] = 1;// Example to hide article active column }elseif($configData['alias'] == 'Article_active'){ $configData['show'] = 0; }
}
return $columnConfigData;
}
-
-
Spaltenname anpassen
//{namespace name=„backend/webcu_test_plugin/main“}
//{block name=„backend/article_list/view/main/grid“ append}
Ext.define(‚Shopware.apps.ArticleList.view.main.Grid-WebcuTestPlugin‘, {
override: ‚Shopware.apps.ArticleList.view.main.Grid‘,getColumns: function() { var me = this, columns = me.callParent(arguments); Ext.each(columns, function(columns) { if (columns.dataIndex === "Attribute_webcuTestAttribute") { columns.header = '{s name=webcuTestAttributeTitle}{/s}' } }); return columns; }
});
//{/block}
In der „editColumnConfig“ Funktion kann man jetzt beliebige Spalte anpassen. Meine Spalte wird nun korrekt dargestellt und ich kann diese mit dem Inline-Editor bearbeiten und speichern!
Vielleicht wird das ja für jemandem hilfreich sein
Besten Gruß,
Nikita