Question

Je suis chargé de convertir les devis en un type de données personnalisé et d'utiliser Mage_Core_Helper_Data::copyFieldset fonctionnait très bien jusqu'à ce que j'aie deux propriétés cibles qui devaient être définies sur la même propriété source.J'ai essayé plusieurs choses différentes

        <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>

Ci-dessus en est un quote_id nœud, multiple to_varien_object nœuds.

        <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>

Ci-dessus est multiple quote_id nœuds, chacun avec un to_varien_object nœud.

Aucune de ces approches ne s’applique avec succès quote_id aux deux refnum et txn_uuid.

En regardant le code, je ne suis pas sûr que ce que je recherche soit possible, mais j'espère que je pourrai me tromper !

Merci

Était-ce utile?

La solution

Une autre solution serait d'utiliser l'événement qui est distribué lorsque le copierFieldset la fonction s'appelle :

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

Comme vous pouvez le constater, le nom de l'événement est dynamique, donc dans ce cas, si vous appelez copyFieldset('other_thing_convert_quote', 'to_varien_object', ...) le nom de l'événement sera core_copy_fieldset_other_thing_convert_quote_to_varien_object et voici ce que vous mettriez dans le config.xml de votre module :

<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>

Et enfin, dans la méthode observateur, vous faites ceci pour définir les valeurs dont vous avez besoin :

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());
}

Autres conseils

Ce problème ne semble pas susciter un grand intérêt, mais au cas où quelqu'un tomberait sur ce problème à l'avenir, voici la meilleure solution que j'ai pu déterminer.Magento récupère les données de la source et définit les données sur la cible en utilisant getDataUsingMethod/setDataUsingMethod qui tente d'effectuer un appel de méthode "camélisé" basé sur le nom du nœud.Par exemple:

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

Je vais essayer d'appeler setPropertyA et getPropertyA sur les deux objets.Si au lieu de ces appels déléguant à getData et setData à travers Varien_Object::__call il existe une méthode définie, il n'y a presque aucune limite à la flexibilité.Si deux propriétés doivent être définies à partir d'une seule source, l'ensemble de champs XML suivant fonctionnera :

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

Et si la méthode setPropertiesAb est défini sur le another classe, cette méthode peut gérer le réglage des deux property_a et property_b en utilisant le property_a valeur de thing.

Ce serait bien s'il existait une meilleure solution qui ne nécessiterait pas essentiellement d'étendre chaque classe nécessitant cette approche personnalisée, mais c'est ma meilleure tentative pour résoudre le problème !

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top