2012-02-10 14 views
5

いくつかの値で新しい属性(複数選択)を作成しましたが、すべて正常に機能しますが、選択した値をすべて削除するとメッセージが表示されます"商品属性が保存されました。"値はまだ選択されています。Magento - 製品管理で複数の選択値を削除できません

注:

  • 私は保存する前に最後の値を選択解除するCtrl + Clickを押してください。
  • は、私は、パラメータ値必須に私の属性のを設定しません、私はまだ選択された任意の値を指定せずに製品を保存する場合は、何も値が
  • 私のインデックスが適切に以下を参照してください
  • をリフレッシュされ、選択されなかっ取得
  • 2つの画面、左側に私の属性のパラメータ、右側に私の複数選択します。

enter image description here

私はあなたの助けに感謝しますので、アイデアが不足しています。

答えて

11

これは、Magento Adminhtmlフォームの既知の(厄介な)動作です。
問題は、マルチセレクションに値が選択されていない場合、フォームが送信されるときに、その属性の値がポストされないことです。

サーバー側では、モデルを読み込み、モデルに投稿されたすべての属性値を設定して保存します。
値がポストされていないため、モデルにロードされた元の値は更新されませんでした。

カスタムソースモデルの属性の解決策として、空のオプションに特別なオプション値(例:-1)を指定する傾向があります。その値は0または空の文字列であってはなりません。

次に、_beforeSave()メソッドでその特別な値をチェックするその属性のバックエンドモデルを指定します。見つかった場合、バックエンドモデルはモデルインスタンスの属性を設定解除します。ここで

は一例です:

ソースモデル:

class Your_Module_Model_Entity_Attribute_Source_Example 
    extends Mage_Eav_Model_Entity_Attribute_Source_Abstract 
{ 
    const EMPTY = '-1'; 

    public function getAllOptions() 
     $options = array(
      array('value' => 1, 'label' => 'One'), 
      array('value' => 2, 'label' => 'Two'), 
      array('value' => 3, 'label' => 'Three') 
     ); 
     if ($this->getAttribute()->getFrontendInput() === 'multiselect') 
     { 
      array_unshift($options, array('value' => self::EMPTY, 'label' => '')); 
     } 
     return $options; 
    } 
} 

バックエンドモデル:

class Your_Module_Model_Entity_Attribute_Backend_Example 
    extends Mage_Eav_Model_Entity_Attribute_Backend_Abstract 
{ 
    public function beforeSave($object) 
    { 
     $code = $this->getAttribute()->getAttributeCode(); 
     $value = $object->getData($code); 
     if ($value == Your_Module_Model_Entity_Attribute_Source_Example::EMPTY) 
     { 
      $object->unsetData($code); 
     } 
     return parent::beforeSave($object); 
    } 
} 

あなたがより良い回避策を見つけた場合は私に知らせてください。

+0

あなたのコードを共有していただきありがとうございます。 – adrien54

0

Magento 1.7.0でこの問題が発生しました。2、私の解決策:

  • 使用のFirefoxのFirebugと

  • 右クリック要素で点検を選択し、あなたはFirebugの内底に、このようなものが表示されます、複数選択リストを: XLARGE

  • 選択したものをダブルクリックし、右クリックしてカットし、選択した属性がなくなったら、ページを保存します。

1

はい、私はあまりにも、このにお尻に大きな痛みを発見したが、それはあなたが一度に複数の製品の属性を更新しようとした場合には拭いされる属性の選択]ドロップダウン引き起こした前回のバグを改良したものです。とにかく

は、ここにある私の私は、属性ドロップダウン使用して製品からオプションを削除したい場合、私は何をすべきか:

  • クリックして、一時的に追加
  • をラベルオプションを管理する属性を管理するために

    1. ゴーリスト
    2. のオプションは、一時的な属性オプションを削除します 変更
    3. にしたいすべての製品にこの新しい属性オプションを割り当てる

    すべて解決されました。

  • 1

    <can_be_empty>あなたがSystem.Xmlのに行って、自分のファイルにこの設定を追加する必要があると呼ばれる機能があります:

    <can_be_empty>1</can_be_empty> 
    

    その要素を検査し、選択=「選択」とセーブヒットを削除するには、これで、値を指定せずにマルチセレクトを保存できるようになりました。

    1

    chrome/firefoxデベロッパーツールを使用してhtmlに存在しないオプションを追加し、そのオプションを選択して保存します。例えば、 。

    <option value="99999999">Click this to unselect option</option> 
    
    関連する問題