何時間もの間、静的属性を使用した Magento の奇妙な動作を理解しようとしています。
しばらくして、セットアップ スクリプト内に静的属性を追加する確実な方法を見つけました。
$installer = $this;
$setup = Mage::getModel( 'eav/entity_setup', 'core_setup' );
$installer->startSetup();
// adding the color code attribute as static attribute
$setup->addAttribute( 'catalog_product', 'color_code', array(
'group' => 'General',
'label' => 'Color Code',
'note' => 'the color code',
'type' => 'static',
'input' => 'text',
'backend' => 'eav/entity_attribute_backend_default',
'source' => '',
'frontend' => '',
'required' => false,
'filterable' => true,
'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL
) );
$installer->getConnection()->addColumn(
$installer->getTable( 'catalog/product' ),
'color_code',
array(
'type' => Varien_Db_Ddl_Table::TYPE_TEXT,
'length' => 64,
'comment' => 'Color Code'
)
);
$installer->endSetup();
最初に理解しておきたいこと: 自分でエンティティ テーブルに列を追加する必要があります... OK でした。指定されたスクリプトにより、管理バックエンドで正しい入力を取得できます。指定された列に値がある場合、管理バックエンドの対応する入力フィールドに表示されます...それはいいですね:-)
そして今...大いなる謎:-(
新しい属性に値を保存しようとしても機能しません。それは完全に正しくありません。最初は新しい値を保持しません。Magento全体をVarienおよびZendクラスまでデバッグした後、コードを何も変更せずに突然機能する理由を見つけました。デバッグ中に、モジュールをリセットし、属性を削除して再追加し、キャッシュをクリアしてカタログを再インデックス化することがよくありました。属性が削除され、何度も何度も再読み込みされても、完全に機能するようになりましたoO
何が起こったのかを理解するために、新しい属性foo
で試してみましたが、同じ奇妙な動作が発生します...多くのデバッグ、検査、コーヒーの後...突然動作します。
テスト属性を持つ次のすべてのテストケースではbar
、foobar
、argh
、grmph
... がまったく同じように何度も発生します。
では、セットアップ スクリプトを別の Magento インストールにプッシュしてみましょう。...はい、同じ oO
このようにして、セットアップスクリプトが何を意味するのかを保証できません:-(
情報: 同じ属性 (カラー コード) 値を持つ他の製品を検索する際に不要な結合を避けるために、静的属性が必要です。静的属性は、コレクションに特別な属性を追加することなく、基本的に各コレクションで使用できます。