Có nó có thể lập trình nhờ vào các phương pháp Mage_Eav_Model_Entity_Setup::updateAttribute($entityTypeId, $id, $field, $value=null, $sortOrder=null)
Đó là không thể với Ban Quản lý thuộc tính trong Magento Backend bởi vì nó có hậu quả với các dữ liệu hiện có. Trong trường hợp của bạn, việc thay đổi từ chọn thành multiselect sẽ là ok nhưng thực hiện sao lưu cơ sở dữ liệu và kiểm tra nếu sản phẩm của bạn vẫn được hiển thị chính xác.
Theo cách lập trình, cách tốt nhất là làm điều đó từ tập lệnh thiết lập cập nhật. Tôi không biết mô-đun của bạn nhưng đây là một số thông tin để làm điều đó.
Tập lệnh thiết lập cập nhật được khởi chạy khi bạn cung cấp phiên bản số mới cho mô-đun của mình và bạn cung cấp tập lệnh thiết lập với số phiên bản cũ và mới làm tên tệp.
1) Dưới đây là tiêu đề của mô-đun config.xml, thay đổi nó để cung cấp phiên bản cao hơn. Ví dụ, phiên bản mới là
<?xml version="1.0" encoding="UTF-8"?>
<config>
<modules>
<Mycompany_Mymodule>
<version>1.0.1</version><!-- the old one was 1.0.0 -->
</Mycompany_Mymodule>
</modules>
...
</config>
2) bạn cần phải có trong file config.xml, giữa các thẻ <global>...</global>
đoạn mã sau, xin vui lòng thích ứng với tình hình của bạn:
<resources>
<mymodule_setup><!-- name that you will give to the folder into the sql folder -->
<setup>
<module>Mycompany_Mymodule</module>
<class>Mage_Eav_Model_Entity_Setup</class><!-- You can have a setup class which extends this class -->
</setup>
<connection>
<use>default_setup</use>
</connection>
</mymodule_setup>
</resources>
3) Sau đó, bạn cần tạo tập lệnh thiết lập trong thư mục mô-đun của mình với phiên bản ứng dụng/mã số cũ/mới/local/mycompany/mymodule/sql/mymodule_setup/mysql4-upgrade-1.0.0-1.0.1.php (mysql4-upgrade-old.version.number-new.version.number.php)
4) Và trong kịch bản mới này thiết lập một mã như thế này, xin vui lòng thích ứng với tình hình của bạn:
<?php
$installer = $this;
/*@var $installer Mage_Eav_Model_Entity_Setup */
$entityTypeId = $installer->getEntityTypeId('catalog_product');
$idAttributeOldSelect = $this->getAttribute($entityTypeId, 'myold_attribute', 'attribute_id');
$installer->updateAttribute($entityTypeId, $idAttributeOldSelect, array(
'frontend_input' => 'multiselect'
));
5) Làm mới trang Magento của bạn và cuối cùng tuôn bộ nhớ cache
cảm ơn câu trả lời chi tiết như vậy, tôi sẽ thử giải pháp do bạn đề xuất ... – Ravish
@mushin là đúng. Bạn muốn ''frontend_input'' trong lệnh' updateAttribute() ', không phải'' input''. (Thử nghiệm trên Magento 1.9.0.1) –
@TylerV. nếu bạn kiểm tra lớp 'Mage_Eav_Model_Entity_Setup :: _ prepareValues' bạn sẽ thấy rằng' đầu vào' sẽ làm việc –