` كوبفيلدسيت ' خاصية مصدر واحد لخصائص الهدف متعددة

magento.stackexchange https://magento.stackexchange.com//questions/70556

  •  13-12-2019
  •  | 
  •  

سؤال

أنا مكلف بتحويل علامات الاقتباس إلى نوع بيانات مخصص ، واستخدام Mage_Core_Helper_Data::copyFieldset كان يعمل بشكل جيد حقا حتى كان لي اثنين من الخصائص المستهدفة التي كان لا بد من تعيين إلى نفس الخاصية المصدر.لقد حاولت بضعة أشياء مختلفة

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

أعلاه هو واحد quote_id عقدة متعددة to_varien_object العقد.

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

أعلاه متعددة quote_id العقد ، كل واحدة to_varien_object عقدة.

لا يتم تطبيق أي من هذين النهجين بنجاح quote_id على حد سواء refnum و txn_uuid.

بالنظر إلى الكود ، لست متأكدا مما إذا كان ما أبحث عنه ممكنا ، ولكن آمل أن أكون مخطئا!

شكرا

هل كانت مفيدة؟

المحلول

حل آخر هو استخدام الحدث الذي يتم إرساله عندما كوبفيلدسيت تسمى الوظيفة:

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

كما ترى ، يكون اسم الحدث ديناميكيا ، لذا في هذه الحالة إذا اتصلت إذا كنت ترغب في الحصول على معلومات حول هذا الموضوع ، يرجى الاتصال بنا للحصول على معلومات حول هذا الموضوع ...) سيكون اسم الحدث كوري_كوبي_فيلدس_آخرها_تحويل_كوتي_إلى_فارين_كائن وهذا هو ما كنت وضعت في تكوين الوحدة النمطية الخاصة بك.شمل:

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

وأخيرا في طريقة المراقب يمكنك القيام بذلك لتعيين القيم التي تحتاج إليها:

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

نصائح أخرى

لا يبدو أن هناك اهتماما كبيرا بهذه المشكلة ، ولكن في حالة تعثر شخص ما في هذه المشكلة في المستقبل ، فإليك أفضل حل تمكنت من تحديده.الماجنتو يحصل على البيانات من المصدر ويحدد البيانات على الهدف باستخدام getDataUsingMethod/setDataUsingMethod الذي يحاول إجراء استدعاء طريقة "كاميليزد" على أساس نودينام.على سبيل المثال:

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

سوف نحاول الاتصال setPropertyA و getPropertyA على الكائنين.إذا بدلا من تلك المكالمات تفويض ل getData و setData من خلال Varien_Object::__call هناك طريقة محددة ، لا يوجد حد تقريبا للمرونة.إذا كانت هناك حاجة إلى تعيين خاصيتين من مصدر واحد ، فستعمل مجموعة حقول شمل التالية:

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

وإذا كانت الطريقة setPropertiesAb يتم تعريفه على another فئة ، يمكن لهذه الطريقة التعامل مع إعداد كليهما property_a و property_b باستخدام property_a القيمة من thing.

سيكون من الجيد إذا كان هناك حل أفضل لا يتطلب بشكل أساسي توسيع كل فئة تحتاج إلى هذا النهج المخصص ، ولكن هذا هو أفضل طعنة في حل المشكلة!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى magento.stackexchange
scroll top