5

いくつかの値で新しい属性 (複数選択) を作成しました。すべて正常に動作しますが、製品の選択した値をすべて削除しようとすると、「製品属性が保存されました」というメッセージが表示されます。ただし、値はまだ選択されています。

ノート:

  • Ctrl + Click保存する前に、を押して最後の値の選択を解除します。
  • 属性のパラメーターValue RequiredをNoに設定しました
  • 値を選択せず​​に製品を保存すると、値が選択されません
  • インデックスが正しく更新されている
  • 以下の 2 つの画面を参照してください。左側には属性のパラメーターが表示され、右側には複数選択が表示されます。

ここに画像の説明を入力

アイデアが不足しているので、助けてくれてありがとう。

4

5 に答える 5

11

これは、Magento Adminhtmlフォームの既知の(迷惑な)動作です。
問題は、複数選択に値が選択されていない場合、フォームの送信時にその属性の値が送信されないことです。

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

カスタムソースモデルを使用した属性の解決策として、特別なオプション値を持つ空のオプションを提供する傾向があります(例-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);
    }
}

より良い回避策を見つけたら、私に知らせてください。

于 2012-02-10T11:35:00.060 に答える
0

私の解決策であるMagento 1.7.0.2でこの問題に遭遇しました:

  • Firebug で Firefox を使用する

  • 複数選択リストを右クリックし、[Inspect with Element] を選択すると、Firebug の下部に次のようなものが表示されます: XLarge

  • 選択した属性をダブルクリックし、右クリックして切り取り、選択した属性を削除して、ページを保存します。

于 2013-02-18T11:43:58.147 に答える