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

2 „Gefällt mir“

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.