إزالة <values> خيار من وحدة موسعة
-
12-12-2019 - |
سؤال
لدينا وحدة عامة التي تنفذ بعض وظائف القطعة ويضيف القوالب الأساسية إلى متجر ، والتي يتم تعريفها في 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
الطريقة.طبقات نظافة بالنسبة لي.