CrudService - arrayStore übersetzen?

Hallo Zusammen,

 

Ich erstelle gerade ein Plugin welches ein DropDown Freitextfeld zur Verfügung stellt (combobox).

Gibt es eine Möglichkeit den arrayStore direkt beim Anlegen über den CrudService zu übersetzen?

Bisher mache ich folgendes:

 

$crudService->update($table, 'my_field_position', 'combobox', [
    'label' => 'Position',
    'arrayStore' => [
        ['key' => 'top_left', 'value' => 'Oben links / Top left'],
        ['key' => 'top_right', 'value' => 'Oben rechts / Top right'],
        ['key' => 'bottom_left', 'value' => 'Unten links / Bottom left'],
        ['key' => 'bottom_right', 'value' => 'Unten rechts / Bottom right']
    ],
    'displayInBackend' => true,
]);

Ich suche nun nach einer Möglichkeit die ‚values‘ des arrayStore zu übersetzen. Sowas in der Richtung wie:

$crudService->update($table, 'my_field_position', 'combobox', [
    'label' => 'Position',
    'arrayStore' => [
        ['key' => 'top_left', 'value' => [
            'de_DE' => 'Oben links',
            'en_GB' => 'Top left'
            ]
        ],
        ['key' => 'top_right', 'value' => 'Oben rechts / Top right'],
        ['key' => 'bottom_left', 'value' => 'Unten links / Bottom left'],
        ['key' => 'bottom_right', 'value' => 'Unten rechts / Bottom right']
    ],
    'displayInBackend' => true,
]);

 

Das hatte ich getestet, funktioniert aber nicht…

Hat jemand eine Idee oder weiß wie es geht?

 

Viele Grüße

Dennis

Hallo,

es lassen sich nur das label, der supportText und der helpText übersetzen, siehe: Attribute system . Beim arrayStore musst du es also weiterhin “Denglisch” machen. Übersetzungen gehören aber so und so in snippet - Dateien, siehe verlinkte Dokumentation.

Grüße

Sebastian

Hallo Dennis,

 

Du kannst den arrayStore auch von snippets (über)setzen lassen.

Dann musst Du kein „Denglisch“ verwenden.

Registriere Dich hierfür auf folgendes Event:

'Enlight_Controller_Action_PostDispatchSecure_Backend_AttributeData' 

Hier dann der zugehörige Event Handler:

public function onPostDispatchBackendAttributeData(\Enlight_Event_EventArgs $args)
{
    $request = $args->getSubject()->Request();

    if ($request->getActionName() == 'list' && !$request->getParam('raw')) {

        $view = $args->getSubject()->View();
        $columns = $view->data;
        $snippets = Shopware()->Container()->get('snippets')
		->getNamespace('backend/attribute_columns');

        foreach ($columns as $column) {
            $key = $column->getTableName() . '_' . $column->getColumnName() . '_';
            if ($snippet = $snippets->get($key . 'arrayStore')) {
                $column->setArrayStore($snippet);
            }
        }

        $view->data = $columns;
    }
}

Lege Dir dann unter dem namespace ‚backend/attribute_columns‘

das Snippet ‚s_articles_attributes_my_field_position_arrayStore‘

mit folgenden values an

[de_DE]

[{"key":"top_left","value":"Oben Lins"},{"key":"top_right","value":"Oben Rechts"},{"key":"bottom_left","value":"Unten Links"},{"key":"bottom_right","value":"Unten rechts"}]

[en_GB]

[{"key":"top_left","value":"Top left"},{"key":"top_right","value":"Top right"},{"key":"bottom_left","value":"Bottom left"},{"key":"bottom_right","value":"Bottom right"}]

Voilà … arrayStore übersetzt :wink:

2 „Gefällt mir“

@MrMDeluxe schrieb:

Hallo Dennis,

 

Du kannst den arrayStore auch von snippets (über)setzen lassen.

Dann musst Du kein „Denglisch“ verwenden.

Registriere Dich hierfür auf folgendes Event:

‚Enlight_Controller_Action_PostDispatchSecure_Backend_AttributeData‘

Hier dann der zugehörige Event Handler:

public function onPostDispatchBackendAttributeData(\Enlight_Event_EventArgs $args)
{
$request = $args->getSubject()->Request();

if ($request->getActionName() == ‚list‘ && !$request->getParam(‚raw‘)) {

$view = $args->getSubject()->View();
$columns = $view->data;
$snippets = Shopware()->Container()->get(‚snippets‘)
->getNamespace(‚backend/attribute_columns‘);

foreach ($columns as $column) {
$key = $column->getTableName() . ‚’ . $column->getColumnName() . '‘;
if ($snippet = $snippets->get($key . ‚arrayStore‘)) {
$column->setArrayStore($snippet);
}
}

$view->data = $columns;
}
}

Lege Dir dann unter dem namespace ‚backend/attribute_columns‘

das Snippet ‚s_articles_attributes_my_field_position_arrayStore‘

mit folgenden values an

[de_DE]

[{„key“:„top_left“,„value“:„Oben Lins“},{„key“:„top_right“,„value“:„Oben Rechts“},{„key“:„bottom_left“,„value“:„Unten Links“},{„key“:„bottom_right“,„value“:„Unten rechts“}]

[en_GB]

[{„key“:„top_left“,„value“:„Top left“},{„key“:„top_right“,„value“:„Top right“},{„key“:„bottom_left“,„value“:„Bottom left“},{„key“:„bottom_right“,„value“:„Bottom right“}]

Voilà … arrayStore übersetzt :wink:

Hat so geklappt!

 

Ich musste mir allerdings statt $view->data die Columns mit $view->getAssign(‚data‘) holen und am Ende auch mit $view->assign(‚data‘, $columns) neu setzen. Das mit em Magic field hat aus unerklärlichen Gründen nicht funktioniert und das Columns-Array war leer.

 

So funktioniert es wunderbar!