このチュートリアルに従いますが、私の質問です。EAVエンティティを新しいEAVエンティティの属性として使用できますか?
ありがとう。
編集:私が最初に投稿したチュートリアルはかなりめちゃくちゃで、代わりにこの他のチュートリアルに従ってしまいました。
このチュートリアルに従いますが、私の質問です。EAVエンティティを新しいEAVエンティティの属性として使用できますか?
ありがとう。
編集:私が最初に投稿したチュートリアルはかなりめちゃくちゃで、代わりにこの他のチュートリアルに従ってしまいました。
回答:
はい、可能です。
カスタムソースモデルを持つメインエンティティの属性を追加する必要があります。
エンティティが呼び出され、エンティティに属性を持たせたいArticle
とAuthor
します。そのため、記事を追加/編集するときに、ドロップダウンからすべての著者の1人を選択できます。 Article
Author
これをTC_Skeleton_Model_Resource_Setup
、他の属性の中で(リンクした例から)セットアップクラスに追加する必要があります。
'author_id' => array(
'type' => 'int',
'label' => 'Author',
'input' => 'select',
'required' => true, //or false
'sort_order' => 10, //what ever
'position' => 10,//what ever
'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL, //or SCOPE_WEBSITE or SCOPE_STORE,
'source' => '[module_alias]/source_author', //this needs to be added
),
次に[Namespace]_[Module]_Model_Source_Author
、このコンテンツでクラスを作成します
<?php
class [Namespace]_[Module]_Model_Source_Author extends Mage_Eav_Model_Entity_Attribute_Source_Abstract{
protected $_options = null;
public function getAllOptions($withEmpty = false){
if (is_null($this->_options)){
$this->_options = array();
$authors = Mage::getModel('[module_alias]/author')->getCollection()->addAttributeToSelect('name')->addAttributeToSelect('country');
foreach ($authors as $author) {
$this->_options[] = array(
'value' => $author->getId(),
'label' => $author->getName(). ' - '.$author->getCountry()
);
}
}
$options = $this->_options;
if ($withEmpty) {
array_unshift($options, array('value'=>'', 'label'=>''));
}
return $options;
}
public function getOptionText($value)
{
$options = $this->getAllOptions(false);
foreach ($options as $item) {
if ($item['value'] == $value) {
return $item['label'];
}
}
return false;
}
}
さらに、カスタムソースモデルを使用して属性を製品に追加する方法の例とここを見つけることができます。エンティティがEAVの場合、同じように機能します。最も重要な部分は、getAllOptions
上記のクラスのメソッドです。値の配列を返す限り、そこで何でもできます。
また、この拡張機能が役立つ場合があります。エンティティ(EAVまたはフラット)に必要なファイルをオンザフライで構築でき、エンティティ間の関係(1対多または多対多)を確立することもできます。あなたのケースでは、1対多の関係が必要です。
私は拡張機能の開発に関わっていますが、誰でも自由に使用または変更できます。