Artikel Attribute und Freitextfelder in der Artikel-Liste

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:

  1. 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);
        }

    }
}

 

  1. 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;
      }

 

  1. 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  Halo

 

Besten Gruß,

Nikita

Danke für den Code hat echt geholfen. Was ich noch vermisse ist die Reihenfolge wie ich die ändern kann.

Die Reinfolge kann direkt im Schritt 3 per “Key” angepasst werden.

Hallo ich bin auf der Suche nach so einer Extension für Shopware 6 oder halt selbst Code einbinden. Hat jemand einen Tipp für mich? Vielen Dank für jeden Hinweis im Vorraus.