Lập trình tạo tập thuộc tính mới trong khi kế thừa từ một thuộc tính khác


7

Tôi đang lập trình tạo các thuộc tính và bộ thuộc tính. Các thuộc tính hoạt động như họ nên, nhưng với bộ thuộc tính tôi có một vấn đề.

Khi tôi tạo một tập thuộc tính, tôi không thể để nó kế thừa từ tập khác (ví dụ: tập mặc định). Tôi đã tìm kiếm rất nhiều nhưng không thể tìm thấy bất kỳ thông tin tốt nào có thể giúp tôi thêm.

Tôi nghĩ đầu tiên nên có một số chức năng cho phép bạn nhân đôi một bộ và chỉnh sửa nó. Tôi không thể tìm thấy nó.

Suy nghĩ thứ hai của tôi là tạo lại toàn bộ tập hợp, nhưng tôi không thể tìm thấy một hàm để lấy các nhóm từ một tập thuộc tính mà tôi muốn.

Tôi khá mới với Magento, rất xin lỗi nếu tôi vừa bỏ lỡ điều gì đó, nhưng hiện tại tôi đang bị mắc kẹt. Bất kỳ giải pháp / đề xuất sẽ được đánh giá rất cao.

Câu trả lời:


11

Sau khi thử lại, làm hỏng rất nhiều và cuối cùng tìm ra câu trả lời chính xác, điều này hoạt động:

$entityTypeId = Mage::getModel('catalog/product')
                  ->getResource()
                  ->getEntityType()
                  ->getId(); //product entity type

$attributeSet = Mage::getModel('eav/entity_attribute_set')
                  ->setEntityTypeId($entityTypeId)
                  ->setAttributeSetName("test_set");

$attributeSet->validate();
$attributeSet->save();

$attributeSet->initFromSkeleton($entityTypeId)->save();

Bạn cần phải tiết kiệm trước khi bạn làm initFromSekeleton(). Nếu không thì nó sẽ không hoạt động.


Giống như Robbie đã nói, bạn chỉ có thể sử dụng Mage_Catalog_Model_Product_Attribute_Set_Api::createđể làm tất cả điều này cho bạn
Erfan

10

Chỉ cần một lưu ý, có vẻ như mô hình API tập thuộc tính có thể tự làm điều này:

$newSetName    = 'My New Set';
$originalSetId = 4; // the set to base the new one off

/** @var Mage_Catalog_Model_Product_Attribute_Set_Api */
Mage::getModel('catalog/product_attribute_set_api')
    ->create($newSetName, $originalSetId);

1
Ồ tốt đẹp Đây là một giải pháp tốt hơn nhiều .. có lẽ nó đã không tồn tại 2 năm trước
Erfan

10

Xem cách các bộ thuộc tính được tạo (kế thừa) từ phụ trợ. Kiểm tra phương pháp này : Mage_Adminhtml_Catalog_Product_SetController::saveAction().
Trong phương thức đó có dòng này 'nhân bản' bộ thuộc tính:

$model->initFromSkeleton($this->getRequest()->getParam('skeleton_set')); 

Trường hợp ->getParam('skeleton_set')thuộc tính được thiết lập để được nhân bản. Về cơ bản bạn cần phải làm một cái gì đó như thế này:

$cloneSetId = 4;//or anything else
$entityTypeId = Mage::getModel('catalog/product')->getResource()->getTypeId(); //product entity type
$model = Mage::getModel('eav/entity_attribute_set'); //instantiate the model
$model->setEntityTypeId($entityTypeId);//attribute set is used for products
$model->setAttributeSetName('Attribute set name here');//set the attribute set name
$attributeSet->save(); // save before initFromSkeleton
$model->initFromSkeleton($cloneSetId);//clone one attribute set
$model->save();//save the new attribute set
//do other modifications here

Hmm, có vẻ như mã này bằng cách nào đó chỉ sao chép các nhóm chứ không phải các thuộc tính trong các nhóm đó ..
Deep Frozen

Điều này có nghĩa là tôi có thể đã bỏ lỡ một cái gì đó. Bởi vì trong initFromSkeletonphương pháp có dòng này $newGroup->setAttributes($newAttributes);. Điều này sẽ đặt một số thuộc tính. Hãy chắc chắn rằng bạn đã sao chép một bộ hợp lệ, bạn cũng có thể gỡ lỗi Mage_Adminhtml_Catalog_Product_SetController::saveAction()và thử mô phỏng nó trong mã của bạn. Đó là một đường nối để làm việc.
Marius

Đó là một ID hợp lệ (tôi chỉ sử dụng 4, là một bộ mặc định hiện có), nhưng tôi không thể tìm thấy bất cứ điều gì để sửa nó: S
Deep Frozen
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.