Frage

Ich habe die Aufgabe, Anführungszeichen in einen benutzerdefinierten Datentyp zu konvertieren und zu verwenden Mage_Core_Helper_Data::copyFieldset funktionierte wirklich gut, bis ich zwei Zieleigenschaften hatte, die auf dieselbe Quelleigenschaft gesetzt werden mussten.Ich habe ein paar verschiedene Dinge ausprobiert

        <other_thing_convert_quote>
            <grand_total>
                <to_varien_object>total</to_varien_object>
            </grand_total>
            <quote_currency_code>
                <to_varien_object>currency</to_varien_object>
            </quote_currency_code>
            <quote_id>
                <to_varien_object>refnum</to_varien_object>
                <to_varien_object>txn_uuid</to_varien_object>
            </quote_id>
        </other_thing_convert_quote>

Oben ist einer quote_id knoten, mehrfach to_varien_object Knoten.

        <other_thing_convert_quote>
            <grand_total>
                <to_varien_object>total</to_varien_object>
            </grand_total>
            <quote_currency_code>
                <to_varien_object>currency</to_varien_object>
            </quote_currency_code>
            <quote_id>
                <to_varien_object>refnum</to_varien_object>
            </quote_id>
            <quote_id>
                <to_varien_object>uuid</to_varien_object>
            </quote_id>
        </other_thing_convert_quote>

Oben ist mehrfach quote_id knoten mit jeweils einem to_varien_object Knoten.

Keiner dieser Ansätze wird erfolgreich angewendet quote_id zu beiden refnum und txn_uuid.

Wenn ich mir den Code anschaue, bin ich mir nicht sicher, ob das, wonach ich suche, überhaupt möglich ist, aber hoffentlich kann mir das Gegenteil bewiesen werden!

Danke

War es hilfreich?

Lösung

Eine andere Lösung wäre, das Ereignis zu verwenden, das ausgelöst wird, wenn das Kopierfeldsatz funktion wird aufgerufen:

$eventName = sprintf('core_copy_fieldset_%s_%s', $fieldset, $aspect);
Mage::dispatchEvent($eventName, array(
    'target' => $target,
    'source' => $source,
    'root'   => $root
));

Wie Sie sehen können, ist der Ereignisname dynamisch, also in diesem Fall, wenn Sie anrufen copyFieldset('other_thing_convert_quote', 'zu_varien_objekt', ...) der Name der Veranstaltung wird sein core_copy_fieldset_anderes_ding_quote_umwandeln_zu_varien_objekt und das würden Sie in die Konfiguration Ihres Moduls einfügen.XML:

<events>
    <core_copy_fieldset_other_thing_convert_quote_to_varien_object>
        <observers>
            <modulename>
                <type>singleton</type>
                <class>modulename/observer</class>
                <method>coreCopyFieldsetOtherThingConvertQuoteToVarienObject</method>
            </modulename>
        </observers>
    </core_copy_fieldset_other_thing_convert_quote_to_varien_object>
</events>

Und schließlich tun Sie dies in der Beobachtermethode, um die benötigten Werte festzulegen:

public function coreCopyFieldsetOtherThingConvertQuoteToVarienObject($observer) {
    // your 'other_thing'
    $src = $observer->getSource();

    // your 'varien_object'
    $target = $observer->getTarget();

    $target->setData('refnum', $src->getQuoteId());
    $target->setData('txn_uuid', $src->getQuoteId());
}

Andere Tipps

Es scheint kein nennenswertes Interesse an diesem Thema zu geben, aber falls in Zukunft jemand auf dieses Thema stößt, ist hier die beste Lösung, die ich ermitteln konnte.Magento ruft Daten von der Quelle ab und legt Daten auf dem Ziel fest mit getDataUsingMethod/setDataUsingMethod welches versucht, einen "kamelisierten" Methodenaufruf basierend auf dem Knotennamen durchzuführen.Beispielsweise:

<my_module_convert_thing>
  <property_a>
    <to_another>*</to_another>
  </property_a>
</my_module_convert_thing>

Werde versuchen anzurufen setPropertyA und getPropertyA auf die beiden Objekte.Wenn anstelle dieser Anrufe delegiert wird an getData und setData durch Varien_Object::__call es gibt eine definierte Methode, der Flexibilität sind fast keine Grenzen gesetzt.Wenn zwei Eigenschaften aus einer Quelle festgelegt werden müssen, funktioniert das folgende XML-Feldset:

<my_module_convert_thing>
  <property_a>
    <to_another>properties_ab</to_another>
  </property_a>
</my_module_convert_thing>

Und wenn die Methode setPropertiesAb ist definiert auf der another klasse, diese Methode kann die Einstellung von beiden behandeln property_a und property_b mit dem property_a wert von thing.

Es wäre schön, wenn es eine bessere Lösung gäbe, bei der nicht im Wesentlichen jede Klasse erweitert werden müsste, die diesen benutzerdefinierten Ansatz benötigt, aber dies ist mein bester Versuch, das Problem zu lösen!

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