読み取り専用製品バックエンド属性
-
16-10-2019 - |
質問
属性の読み物のみを作成したいのですが、それは不可能です。
私はaddattribute()に合格しようとしました 'disabled' =>true
また 'readonly' => true
成功しません。私は使用についていくつかの提案を見つけました setLockedAttributes()
しかし、何らかの理由で機能していません
参照:
Varien_Data_Form_Element_Abstract::serialize($attributes = array(), $valueSeparator='=', $fieldSeparator=' ', $quote='"')
解決
参照されたSOの記事から - 私は試しましたが、これは実際に1.6ceと1.7ce / 1.12eeで動作します。私はまだ1.8/1.13で試していません。
https://stackoverflow.com/questions/6384120/magento-read-only-and-hidden-product-attributes
わかりました、結局それができるようです。のオブザーバーを追加した後
catalog_product_load_after
イベント、lockAttribute
の方法Mage_Catalog_Model_Abstract
クラスは、製品属性の読み取り専用を作成するために使用できます。これがオブザーバーメソッドのコードです。
public function lockAttributes($observer) {
$event = $observer->getEvent();
$product = $event->getProduct();
$product->lockAttribute('attribute_code');
}
他のヒント
製品管理で編集できないようにするだけで十分な場合は、フロントエンドの入力タイプを使用してください label
, 、フォーム入力をプレーンテキストに置き換えます。
addAttribute($entity, $code, array(
...
'input' => 'label',
...
));
これにより、APIまたは操作されたPOSTリクエストを介して属性の保存を妨げないことに注意してください。安全にするには、さらに使用します lockAttribute()
上記のように.
また、それはテキストタイプの属性、他のタイプの場合にのみ見た目があります。 lockAttributes
または、「ラベル」タイプを拡張します。
これを修正するには、このために入力レンダラーを使用することもできます。欠点は、各入力タイプに対してこれを行い、各属性のセットアップでこれを設定する必要があることです。
そうするには、を使用してください input_renderer 使用するときのキー AddAttribute 属性または frontend_input_renderer 使用するとき updateattribute。例:
$installer->addAttribute(Mage_Catalog_Model_Product::ENTITY, 'yourattribute', array(
// ...
// won't be used actually as you use a custom renderer (constant equals to text), but I'm not sure what omitting this will have as effect..
'input' => Mage_Catalog_Model_Product_Option::OPTION_GROUP_TEXT,
'input_renderer' => 'yourns_yourmodule/adminhtml_product_helper_form_disabledText',
'frontend_class' => 'disabled',
'note' => 'This field is disabled',
// ...
));
それからあなたのクラスで Yourns_Yourmodule_Block_Adminhtml_Product_Helper_Form_DisabledText
実際に使用する入力クラスを拡張します。テキストフィールドの場合はそうなるでしょう Varien_Data_Form_Element_Text
。選択の場合はそうなるでしょう Varien_Data_Form_Element_Select
等々。
次に、このようなコードを追加して属性を無効にし、上書きします getHtml
メソッド、属性の設定、入力フィールドの実際のHTMLコードの返却:
public function getHtml()
{
// Set disabled
$this->setReadonly(true, true);
return parent::getHtml();
}
この方法はで見つけることができます lib/varien/data/form/abstract.php これは、すべてのフォーム入力要素フィールドによって継承されるため、Alawaysが利用可能になるはずです。
/**
* Disable elements
*
* @param boolean $readonly
* @param boolean $useDisabled
* @return Varien_Data_Form_Abstract
*/
public function setReadonly($readonly, $useDisabled = false)
{
if ($useDisabled) {
$this->setDisabled($readonly);
$this->setData('readonly_disabled', $readonly);
} else {
$this->setData('readonly', $readonly);
}
foreach ($this->getElements() as $element) {
$element->setReadonly($readonly, $useDisabled);
}
return $this;
}
それを含めることはおそらく理にかなっています 無効 拒否された入力の可能性を視覚化するために、上記のような属性セットアップのクラス。おそらく使用することもできます $this->addClass('disabled')
この方法では、私はまだこれを試しませんでした。