Valor predeterminado del atributo de producto personalizado desplegable 'sí / no'

10

Instalo el atributo con el siguiente script:

$installer = $this;
$installer->startSetup();

$installer->removeAttribute('catalog_product', 'customizableonly');
$installer->addAttribute('catalog_product', 'customizableonly', array(
        'group'                     => 'General',
        'input'                     => 'select',
        'type'                      => 'int',
        'label'                     => 'Customizable Only',
        'source'                    => 'eav/entity_attribute_source_boolean',
        'global'                    => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL,
        'visible'                   => 1,
        'required'                  => 0,
        'visible_on_front'          => 0,
        'is_html_allowed_on_front'  => 0,
        'is_configurable'           => 0,
        'searchable'                => 0,
        'filterable'                => 0,
        'comparable'                => 0,
        'unique'                    => false,
        'user_defined'              => false,
        'default'           => 0,
        'is_user_defined'           => false,
        'used_in_product_listing'   => true
));

$this->endSetup();

También probé con $installer = new Mage_Catalog_Model_Resource_Eav_Mysql4_Setup('core_setup');

Y luego estoy usando el valor del atributo en otro código. Pero siempre consigo null. Descubrí que el atributo no establece un valor predeterminado. Cuando abro un producto, aparece el menú desplegable No, pero cuando obtengo su valor en el código, lo es null. Si solo hago clic en el menú desplegable, simplemente configure Noy guarde el producto, todo funciona.

¿Cómo superar esto?

Syspect
fuente
para crear drop / atributo use magento.stackexchange.com/questions/12137/…
Amit Bera

Respuestas:

14

Intenta establecer el valor predeterminado como cadena

'default' => '0'

o vacio

'default' => ''

Actualizar

Los valores predeterminados se agregan cuando agrega un producto nuevo para los antiguos que no afecta.

Intenta arreglar eso en la gestión de productos con acción masiva

Dentro de administrar productos, hay una acción llamada "Actualizar atributos". Seleccione todos los productos que desea actualizar y luego seleccione Actualizar atributos y agregue toda la información nueva.

oleksii.svarychevskyi
fuente
1
Ya lo intenté y no funciona. :(
Syspect
3

Debe establecer el valor para todas las entidades existentes manualmente:

$productIds = Mage::getResourceModel('catalog/product_collection')
    ->getAllIds();

// Now create an array of attribute_code => values
$attributeData = array("my_attribute_code" =>"my_attribute_value");

// Set the store to affect. I used admin to change all default values
$storeId = 0; 

// Now update the attribute for the given products.
Mage::getSingleton('catalog/product_action')
    ->updateAttributes($productIds, $attributeData, $storeId);

fuente: /programming/4906497/default-attribute-value-for-all-product-in-magento . Ver la respuesta de Asrar Malik.

Chuongnh
fuente
3

Tuve el problema de que con los fragmentos de código anteriores se creó un atributo select en lugar de un atributo yes / no. Para solucionar esto tuve que usar

'input'             => 'boolean'

en lugar de:

'input'             => 'select'
ahe_borriglione
fuente
0

No pude agregar un valor predeterminado 0 a un atributo sí / no también.

Por lo tanto, utilicé un evento para agregar el valor predeterminado 0

<frontend>
    <events>
        <customer_save_before>
            <observers>
                <xx_save_observer>
                    <type>singleton</type>
                    <class>xx/observer</class>
                    <method>customerSaveBefore</method>
                </xx_save_observer>
            </observers>
        </customer_save_before>
    </events>
</frontend>

Método:

public function customerSaveBefore(Varien_Event_Observer $observer)
{
    try {
        $customer = $observer->getCustomer();
        if (!$customer->getYourCustomAttribute()) {
            $customer->setYourCustomAttribute(0);
        }
    } catch ( Exception $e ) {
        Mage::log( "customer_save_before observer failed: ".$e->getMessage());
    }
}
ahe_borriglione
fuente
0

Para agregar un atributo personalizado sí / no al módulo de creación de magento como se muestra a continuación.

http://www.pearlbells.co.uk/how-to-add-custom-attribute-dropdown-to-category-section-magento/

    <?php
$this->startSetup();
$this->addAttribute(Mage_Catalog_Model_Category::ENTITY, 'featured_product', array(
    'group'         => 'General Information',
    'input'         => 'select',
    'type'          => 'text',
    'label'         => 'Featured Product',
    'backend'       => '',
    'visible'       => true,
    'required'      => false,
    'visible_on_front' => true,
    'global'        => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL,
    'source' => 'eav/entity_attribute_source_boolean',
));

$this->endSetup();
usuario46226
fuente