sì è possibile a livello di codice grazie al metodo Mage_Eav_Model_Entity_Setup::updateAttribute($entityTypeId, $id, $field, $value=null, $sortOrder=null)
Non è possibile con la dirigenza Abilità in Magento backend perché ha conseguenze con i dati esistenti. Nel tuo caso, passare da select a multiselect dovrebbe essere ok ma fare un backup del database e testare se il tuo prodotto è ancora visualizzato correttamente.
A livello di codice, il modo migliore è farlo da uno script di installazione aggiornamento. Non conosco il tuo modulo ma qui ci sono alcune informazioni per farlo.
Uno script di installazione di aggiornamento viene avviato quando si fornisce una nuova versione di numero al modulo e si fornisce uno script di installazione con il numero di versione vecchio e nuovo come nome file.
1) Ecco l'intestazione di un modulo config.xml, modificarlo per fornire una versione superiore. Ad esempio, la nuova versione è
<?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) è necessario avere nel file config.xml, tra i tag <global>...</global>
il seguente codice, si prega di adattarsi alla situazione:
<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) Quindi è necessario creare uno script di installazione nella cartella del modulo con il numero di versione vecchia e nuova app/code/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) E in questo nuovo script impostare un codice come questo, si prega di adattarsi alla situazione:
<?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) Aggiornare la pagina Magento e alla fine svuotare la cache
grazie per una risposta così dettagliata, proverò la soluzione suggerita da voi ... – Ravish
@mushin ha ragione. Vuoi ''frontend_input'' nella chiamata' updateAttribute() ', non'' input''. (Testato su Magento 1.9.0.1) –
@TylerV. se controlli la classe 'Mage_Eav_Model_Entity_Setup :: _ prepareValues' vedrai che' input' funzionerà –