2010-08-11 46 views
15

Tôi muốn thêm thuộc tính vào sản phẩm và tôi muốn thực hiện việc này theo lập trình. Vì vậy, tôi đã thêm một mysql-cài đặt-0.1.0.php đến một mô-đun của tôi, và tôi đã thêm này (lấy cảm hứng từ các ví dụ hiện có):Cách thêm thuộc tính theo chương trình

<?php 

$installer = $this; 

$installer->startSetup(); 

$installer->addAttribute('catalog_product', 'collection', array(
     'type'    => 'varchar', 
     'backend'   => '', 
     'frontend'   => '', 
     'label'    => 'Collection', 
     'input'    => 'text', 
     'class'    => '', 
     'source'   => '', 
     'global'   => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL, 
     'visible'   => false, 
     'required'   => false, 
     'user_defined'  => false, 
     'default'   => '', 
     'searchable'  => false, 
     'filterable'  => false, 
     'comparable'  => false, 
     'visible_on_front' => false, 
     'unique'   => false, 
     'apply_to'   => '', 
     'is_configurable' => false 
    )); 

$installer->endSetup(); 

Cú pháp dường như OK, nhưng khi nói đến việc thực hiện phần này của mã, đây là vấn đề:

Fatal error: Call to undefined method Mage_Core_Model_Resource_Setup::addAttribute() in /home/frleq/Dev/projets/AVIP/WORKSPACE/avip_magento/app/code/local/Smile/Magentaho/sql/magentaho_setup/mysql4-install-0.1.0.php on line 7

Bạn có thấy có gì không ổn? Mã không phải là quá phức tạp, và nó được lấy cảm hứng từ những cái hiện và worling ...

Cảm ơn bạn

Trả lời

27

Bạn đang sử dụng lớp thiết lập sai. Kiểm tra khai báo lớp thiết lập của bạn trong config.xml. Bạn đang sử dụng Mage_Core_Model_Resource_Setup. Thay vào đó, hãy thử Mage_Eav_Model_Entity_Setup.

+2

Đúng vậy, tôi quên đề cập đến lớp Setup trong config.xml: Company_Module Mage_Eav_Model_Entity_Setup Thanks a lot Anders – frinux

+6

Đừng! Sử dụng 'Mage_Catalog_Model_Resource_Setup' thay vì' Mage_Eav_Model_Entity_Setup' liên quan đến Sản phẩm/Thuộc tính danh mục hoặc thuộc tính bổ sung của chúng ** sẽ không được đặt (tức là "is_searchable", "is_visible_on_front" vv) vì phương thức '_prepareValues ​​()' trong lớp thiết lập. – nevvermind

+1

Nếu bạn cần sử dụng cả hai thì sao? – surfer190

12

Nếu bạn muốn sử dụng các tùy chọn liên quan đến sản phẩm (có thể lọc, có thể tìm kiếm, v.v.), bạn nên sử dụng lớp Mage_Catalog_Model_Resource_Eav_Mysql4_Setup.

Trong các phiên bản Magento mới nhất, bạn nên sử dụng lớp Mage_Catalog_Model_Resource_Setup.

+1

Câu trả lời hay nhất! Để có thể thiết lập các cài đặt cụ thể của sản phẩm như visible_on_front, bạn cần sử dụng lớp thiết lập Mage_Catalog_ *. –

Các vấn đề liên quan