Tôi sẽ làm theo hướng dẫn này nhưng câu hỏi của tôi là .. có thể sử dụng Thực thể EAV làm thuộc tính của Thực thể EAV mới không?
Cảm ơn.
EDIT : Hướng dẫn mà tôi đã đăng ban đầu khá lộn xộn và cuối cùng tôi đã làm theo hướng dẫn khác này .
Tôi sẽ làm theo hướng dẫn này nhưng câu hỏi của tôi là .. có thể sử dụng Thực thể EAV làm thuộc tính của Thực thể EAV mới không?
Cảm ơn.
EDIT : Hướng dẫn mà tôi đã đăng ban đầu khá lộn xộn và cuối cùng tôi đã làm theo hướng dẫn khác này .
Câu trả lời:
Vâng nó có thể.
bạn cần thêm một thuộc tính cho thực thể chính có mô hình nguồn tùy chỉnh.
Giả sử các thực thể của bạn được gọi Article
và Author
bạn muốn Article
thực thể có thuộc tính và Author
vì vậy khi bạn thêm / chỉnh sửa và bài viết, bạn có thể chọn từ một trong số tất cả các tác giả.
Bạn cần thêm phần này vào lớp thiết lập ( TC_Skeleton_Model_Resource_Setup
từ ví dụ bạn đã liên kết) trong số các thuộc tính khác:
'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
),
Bây giờ tạo lớp [Namespace]_[Module]_Model_Source_Author
với nội dung này
<?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;
}
}
Ngoài ra, bạn có thể tìm thấy ở đây và ví dụ về cách thêm một thuộc tính với mô hình nguồn tùy chỉnh vào các sản phẩm. Nếu thực thể của bạn là EAV, nó sẽ hoạt động như nhau. Phần quan trọng nhất là getAllOptions
phương thức trong lớp được đề cập ở trên. bạn có thể làm bất cứ điều gì trong đó miễn là bạn trả về một mảng các giá trị.
Ngoài ra phần mở rộng này có thể giúp đỡ. Nó có thể xây dựng nhanh chóng các tệp bạn cần cho các thực thể của mình (EAV hoặc căn hộ) và nó cũng cho phép bạn thiết lập quan hệ giữa các thực thể (một đến nhiều hoặc nhiều với nhiều). Trong trường hợp của bạn, bạn cần một mối quan hệ một đến nhiều.
Tôi tham gia vào việc phát triển tiện ích mở rộng, nhưng mọi người đều có thể sử dụng hoặc thay đổi miễn phí.