拡張モジュールから<値>オプションを削除します
-
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>
.
その基本的な構成をたくさん使っていますが、通常、子拡張子内のいずれかのエナーを取り除きたいが、通常はプロジェクト固有のテンプレートを追加するために使用されますが、今回はデフォルトの1つを削除してください。残念ながら、値のエントリの削除タグのようなものは何もありません。値またはラベルを空の文字列に設定しても機能しません。:(
現在、レンダラーを拡張してそこに値を削除するイベントを探していますが、それは非常に汚れていると感じていて、それを実際には拡張モジュールのwidget.xmlにあることが多いことになります。親/一般モジュールのコードを変更せずにそれをする方法はありますか?
解決
で、Mariusのコメントで既に説明しているように、widget.xmlに定義されているヘルパーブロックを作成しました:
<helper_block>
<type>foobar/adminhtml_widget_values_remover</type>
<data>
<block_type>foobar/widget_block</block_type>
</data>
</helper_block>
.
そのヘルパーブロックは値を除去するために使用され、追加のものをボタンとして表示しないように使用されます(Magentoチュートリアルが例として表示されます)。 残念ながら、ヘルパーブロックがメインウィジェットのノードオプションについて知らないので、ウィジェットノードに戻るのは非常に困難でしたので、データセクションにblock_typeを追加しました。 その後、コード自体はタグ内の除去ノードを介して反復します。 Layout-XML-Removeの他に、複数の削除ノードが1つにマージされるため、属性としては削除するノードを定義する必要があります。
これはヘルパーブロックのコードです:
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);
}
.
繰り返しやブロックタイプのこの再参照にまだ本当に満足していません。
とwidget.xmlのremove-definition:
<parameters>
<template>
<values>
<remove>
<table_2columns />
</remove>
.
誰かが同じ問題を抱えているならば、私はこれが助けることを願っています。 :)
他のヒント
残念ながら、何かを書き直すことなくXMLタグまたは属性を使用してそれを削除する方法はありません。
ウィジェットオプションにフィールドを追加する方法はこれです.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();
}
.
XMLチェック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
メソッドを書き換えることをお勧めします。私に掃除機。