dynamischer Schlüssel => Wertpaar-Adminhtml-Einstellung für benutzerdefiniertes Modul

7

Ich habe ein benutzerdefiniertes Modul mit der Einstellung adminhtml (system.xml), mit dem der Benutzer einer bestimmten Versandmethode einen eindeutigen "Code" zuweisen kann.

Es sieht ungefähr so ​​aus:

Geben Sie hier die Bildbeschreibung ein

Wie Sie sehen können, ist dies ziemlich einfach, da nur 5 Mappings erforderlich waren. Dies wurde wie folgt mit der system.xml gemacht :

<charge_1_method translate="label">
    <label><![CDATA[Charge <b style="color: #FF7F24;">#1</b> Method]]></label>
    <frontend_type>select</frontend_type>
    <source_model>mymodule_adminhtml/system_config_source_dropdown_shippingmethods</source_model>
    <sort_order>14</sort_order>
    <show_in_default>1</show_in_default>
    <show_in_website>0</show_in_website>
    <show_in_store>0</show_in_store>
</charge_1_method>
<charge_1_code translate="label">
    <label><![CDATA[Charge <b style="color: #FF7F24;">#1</b> Code]]></label>
    <frontend_type>text</frontend_type>
    <sort_order>15</sort_order>
    <show_in_default>1</show_in_default>
    <show_in_website>0</show_in_website>
    <show_in_store>0</show_in_store>
</charge_1_code>

... etc

Jetzt hat sich die Anforderung geändert, wobei ich ungefähr 25 verschiedene Versandmethoden einem eindeutigen Code zuordnen muss. Ich möchte, dass dieser Teil der Einstellung dynamisch funktioniert.

Der Benutzer kann also so viele Schlüssel ==> Wertepaare erstellen, wie er möchte.

Der Schlüssel muss die "Versandmethode" aus meiner benutzerdefinierten Dropdown-Auswahlquelle sein. Der Wert muss ein Eingabefeld sein.

Irgendeine Idee, wie ich das erreichen kann? Gibt es Beispiele dafür?

Latheesan
quelle

Antworten:

10

Der Benutzer kann also so viele Schlüssel ==> Wertepaare erstellen, wie er möchte.

Hierfür würde ich die Frontend- und Backend-Modelle "Array" empfehlen, die ähnlich wie die Tier-Preisdefinition in Produkten funktionieren. Sie würden eine Matrix mit 2 Spalten erstellen, die bei Bedarf einfach in eine Schlüssel => Wertekarte umgewandelt werden kann. Mit einer kleinen Erweiterung des Frontend-Modells können Sie Dropdowns auch für die Versandart verwenden.

Es wird hier ausführlich erklärt: http://www.integer-net.com/2015/03/17/how-to-create-tables-in-magento-system-configuration/

Vorschau

Beispiel von integer-net.com

Was du brauchst

  • Das Array-Backend-Modell speichert die Matrix als serialisiertes Array: <backend_model>adminhtml/system_config_backend_serialized_array</backend_model>
  • Benutzerdefiniertes Frontend-Modell, das erweitert Mage_Adminhtml_Block_System_Config_Form_Field_Array_Abstractund überschrieben wird _prepareToRender(), um die Spalten zu definieren.
  • Ein Renderer, der erweitert wird Mage_Core_Block_Html_Select, um ein benutzerdefiniertes Dropdown-Menü zu erstellen.
Fabian Schmengler
quelle
2

Hier ist ein Tutorial zum Hinzufügen eines System-> Konfigurationsabschnitts mit einer dynamischen Anzahl von Feldern.
Das Beispiel zeigt, wie Sie für jede Kundengruppe ein Feld erstellen. Sie können dies jedoch ändern, um es Ihren Anforderungen anzupassen.
Die Hauptidee besteht darin, eine benutzerdefinierte frontend_modelDatei für die Konfigurationsgruppe zu erstellen . Es heißt, frontend_modelaber es ist eigentlich ein Block.
Dieser Block muss über eine Methode namens verfügen _getFieldHtml, mit der Sie einem Feldsatz die Anzahl der benötigten Felder hinzufügen und dann den HTML-Code dieses Feldsatzes zurückgeben können.

Marius
quelle