Quiero agregar un nuevo atributo de producto que presente una lista desplegable con todas las páginas de CMS como sus opciones. Creé una extensión y quería agregar este atributo a través del script de instalación. pero después de la ejecución de este, Magento dañado la tabla eav_entity_type ...Magento: atributo de producto personalizado para seleccionar una página de CMS
Lo he intentado hasta ahora:
MySQL4-instalación-0.1.0.php:
$installer = $this;
$setup = new Mage_Eav_Model_Entity_Setup('core_setup');
$installer->startSetup();
$setup->addAttribute('catalog_product', 'test_report', array(
'label' => 'Test report',
'required' => false,
'input' => 'select',
'source' => 'cmspageselect/entity_source',
'default' => 'none',
'position' => 1,
'sort_order' => 3,
));
$installer->endSetup();
Fuente de cmspageselect/clase entity_source:
class Mandarin_CMSPageSelect_Model_Source extends Mage_Eav_Model_Entity_Attribute_Source_Abstract {
/**
* Retrieve Full Option values array
*
* @param bool $withEmpty Add empty option to array
* @return array
*/
public function getAllOptions($withEmpty = true)
{
$storeId = $this->getAttribute()->getStoreId();
if (!is_array($this->_options)) {
$this->_options = array();
}
if (!isset($this->_options[$storeId])) {
$collection = Mage::getResourceModel('cms/page_collection')
->setPositionOrder('asc')
->setStoreFilter($this->getAttribute()->getStoreId())
->load();
$this->_options[$storeId] = $collection->toOptionIdArray();
}
$options = $this->_options[$storeId];
if ($withEmpty) {
array_unshift($options, array('label' => '', 'value' => ''));
}
return $options;
}
/**
* Get a text for option value
*
* @param string|integer $value
* @return string
*/
public function getOptionText($value)
{
$isMultiple = false;
if (strpos($value, ',')) {
$isMultiple = true;
$value = explode(',', $value);
}
$options = $this->getAllOptions(false);
if ($isMultiple) {
$values = array();
foreach ($options as $item) {
if (in_array($item['value'], $value)) {
$values[] = $item['label'];
}
}
return $values;
}
foreach ($options as $item) {
if ($item['value'] == $value) {
return $item['label'];
}
}
return false;
}
}
Como ya he dicho, en lugar de crear el nuevo "test_report" atributo, Magento simplemente corrompió la eav_entity_type ta ble. No hubo mensaje de error ni entrada de registro sobre lo sucedido.
¿Cómo puedo crear dicho atributo?
Gracias, AENO
¿Puede proporcionar su código fuente para la clase cmspageselect/entity_source? –
He editado la pregunta para incluir la fuente – aeno
¿Cómo está determinando que la tabla está dañada? –