Frage

Wir haben ein allgemeines Modul, das einige Widget-Funktionen implementiert und einem Shop grundlegende Vorlagen hinzufügt, die im definiert sind widget.xml so was:

<some_module>
    <name>my name</name>
    <parameters>
        <template translate="label description">
            <visible>1</visible>
            <label>Block template</label>
            <description>Template to render the block</description>
            <type>select</type>
            <value>cms/widget/static_block/default.phtml</value>
            <values>
                <default translate="label">
                    <value>cms/widget/static_block/default.phtml</value>
                    <label>CMS Static Block Default Template</label>
                </default>
                <table_2columns translate="label">
                    <value>foobar/module/static_block/2columns.phtml</value>
                    <label>2 Columns Table</label>
                </table_2columns>
            </values>
            <sort_order>10</sort_order>
        </template>

Wir verwenden diese Grundkonfiguration häufig, möchten aber jetzt eine der Gesamtheiten in einer untergeordneten Erweiterung entfernen, die normalerweise nur zum Hinzufügen weiterer projektspezifischer Vorlagen verwendet werden, sollten dieses Mal aber auch eine der Standardeinstellungen entfernen.Leider gibt es für Werteeinträge nichts Besseres als ein Remove-Tag.Auch das Festlegen des Werts oder der Bezeichnung auf eine leere Zeichenfolge funktioniert nicht.:(

Ich suche derzeit nach einem Ereignis, um den Renderer zu erweitern und die Werte darin zu entfernen, aber das fühlt sich ziemlich schmutzig an und es wäre viel schöner, das tatsächlich in der widget.xml des Erweiterungsmoduls zu tun.Gibt es eine Möglichkeit, dies zu tun, ohne den Code des übergeordneten/allgemeinen Moduls zu ändern?

War es hilfreich?

Lösung

So wie bereits in den Kommentaren von Marius erörtert, erstellte ich einen Helferblock, der in der Widget.xml definiert ist: generasacodicetagpre.

Der Helperblock wird verwendet, um die Werte zu entfernen und nicht mehr als eine Schaltfläche anzuzeigen (wie die Magento-Tutorials als Beispiel anzeigen). Leider war es sehr schwer, in den Widget-Knoten zurückzukehren, da der Helferblock nicht über die Knotenoptionen des Haupt-Widgets weiß, sodass ich den Block_Type im Datenbereich hinzugefügt habe. Der Code selbst ist dann über einen möglichen Removal-Knoten in den Tags itert. Anders als für das Layout-XML-Remove müssen Sie die Knoten definieren, um als Kinder zu löschen, und nicht als Attribut, da mehrere Entfernen von Knoten zu einem zusammengeführt werden.

Dies ist der Code des Helferblocks: generasacodicetagpre.

Ich bin noch nicht wirklich zufrieden mit den Iterationen und dieser Wiederverwertung des Blocktyps, könnte diese Änderung verbessern.

und die Entfernen-Definition in der Widget.xml: generasacodicetagpre.

Ich hoffe, das hilft, wenn jemand das gleiche Problem haben wird. :)

Andere Tipps

Leider gibt es keine Möglichkeit, es mithilfe eines XML-Tags oder -Attributs zu entfernen, ohne etwas neu zu schreiben.
Die Methode, mit der ein Feld zu den Widget-Optionen hinzugefügt wird, ist folgende: Mage_Widget_Block_Adminhtml_Widget_Options::_addField.
Für Felder, die das haben values Tag, so funktioniert es.

     if ($values  = $parameter->getValues()) {
        // dropdown options are specified in configuration
        $data['values'] = array();
        foreach ($values as $option) {
            $data['values'][] = array(
                'label' => $this->_translationHelper->__($option['label']),
                'value' => $option['value']
            );
        }
    }
    // otherwise, a source model is specified
    elseif ($sourceModel = $parameter->getSourceModel()) {
        $data['values'] = Mage::getModel($sourceModel)->toOptionArray();
    }

Auch wenn Sie überprüfen möchten, wie die Werte von der XML-Prüfung an das Parameterobjekt übergeben werden Mage_Widget_Model_Widget::getConfigAsObject.
In dieser Methode gibt es Folgendes:

                // prepare values (for drop-dawns) specified directly in configuration
                $values = array();
                if (isset($data['values']) && is_array($data['values'])) {
                    foreach ($data['values'] as $value) {
                        if (isset($value['label']) && isset($value['value'])) {
                            $values[] = $value;
                        }
                    }
                }
                $data['values'] = $values;

Daher wird alles, was im Values-Tag steht, später an das Feldelement übergeben.

Ich habe in keiner der beiden Methoden gesehen, dass ein Ereignis ausgelöst wurde. Daher vermute ich, dass Sie eine davon neu schreiben müssen, damit Sie eine hinzufügen können disabled Tag oder Attribut für die Elemente innerhalb der values Etikett.
Wenn Sie sich für diesen Ansatz entscheiden, empfehle ich, den Text neu zu schreiben Mage_Widget_Model_Widget::getConfigAsObject Methode.Für mich sind die Nähte sauberer.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top