سؤال

لدينا وحدة عامة التي تنفذ بعض وظائف القطعة ويضيف القوالب الأساسية إلى متجر ، والتي يتم تعريفها في widget.xml مثل هذا:

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

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

أنا أبحث حاليا عن حدث لتوسيع العارض وإزالة القيم في هناك ، ولكن هذا يشعر القذرة جدا وسيكون أجمل بكثير للقيام بذلك في الواقع في القطعة.شمل من وحدة تمديد.هل هناك طريقة للقيام بذلك دون تغيير رمز الأم / الوحدة العامة?

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

المحلول

حتى نوقشت بالفعل في تعليقات ماريوس الأول خلق كتلة المساعد الذي تم تعريفه في القطعة.شمل:

            <helper_block>
                <type>foobar/adminhtml_widget_values_remover</type>
                <data>
                    <block_type>foobar/widget_block</block_type>
                </data>
            </helper_block>

يتم استخدام كتلة المساعد هذه لإزالة القيم وعدم عرض أي شيء إضافي كزر (كما تظهر دروس الماجنتو كمثال).لسوء الحظ ، كان من الصعب جدا العودة إلى عقدة عنصر واجهة المستخدم ، حيث لا تعرف كتلة المساعد خيارات العقدة الخاصة بالأداة الرئيسية ، لذلك أضفت نوع الحظر في قسم البيانات.ثم يتكرر الرمز نفسه على عقدة إزالة محتملة داخل العلامات.بخلاف تخطيط-شمل-إزالة لديك لتحديد العقد لحذف كما تشايلدز وليس كسمة ، كما سيتم دمج العقد إزالة متعددة إلى واحد.

هذا هو رمز كتلة المساعد:

public function prepareElementHtml(Varien_Data_Form_Element_Abstract $oElement)
{
    $aConfig = $this->getConfig();
    $aValues = $oElement->getValues();
    $oWidget = Mage::getModel('widget/widget');
    $oXmlConfig = $oWidget->getConfigAsXml($aConfig['block_type']);
    $oXmlValues = $oXmlConfig->parameters->template->values;
    $oXmlRemoves = $oXmlValues->remove;
    foreach ($oXmlRemoves->children()as $oXmlRemove) {
        $oXmlRemoveDefinition = $oXmlValues->{$oXmlRemove->getName()};
        foreach ($aValues as $iKey => $aValue) {
            $bEqualsValue = ($aValue['value'] == (string)$oXmlRemoveDefinition->value);
            if ($bEqualsValue) {
                unset($aValues[$iKey]);
            }
        }
    }
    $oElement->setValues($aValues);
}

لست سعيدا حقا بالتكرار بعد ، وقد تؤدي إعادة الإشارة إلى نوع الكتلة هذه إلى تحسين هذا التغيير.

وإزالة التعريف في القطعة.شمل:

    <parameters>
        <template>
            <values>
                <remove>
                    <table_2columns />
                </remove>

آمل أن يساعد هذا ، إذا كان أي شخص سوف يكون نفس المشكلة.:)

نصائح أخرى

للأسف لا توجد طريقة لإزالته باستخدام علامة شمل أو سمة دون إعادة كتابة شيء ما.
الطريقة التي تضيف حقلا إلى خيارات عنصر واجهة المستخدم هي كما يلي: Mage_Widget_Block_Adminhtml_Widget_Options::_addField.
للحقول التي تحتوي على values علامة هذه هي الطريقة التي يعمل بها.

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

أيضا إذا كنت تريد التحقق من كيفية تمرير القيم إلى كائن المعلمة من فحص شمل Mage_Widget_Model_Widget::getConfigAsObject.
يوجد هذا في هذه الطريقة:

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

لذلك سيتم تمرير كل ما هو موجود في علامة القيم لاحقا إلى عنصر الحقل.

لم أر أي حدث تم إرساله بأي من الطريقتين ، لذا أعتقد أنه يجب عليك إعادة كتابة إحداهما حتى تتمكن من إضافة disabled علامة أو سمة على العناصر داخل values الوسم.
إذا قررت اتباع هذا النهج ، فإنني أوصي بإعادة كتابة Mage_Widget_Model_Widget::getConfigAsObject الطريقة.طبقات نظافة بالنسبة لي.

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