Valor padrão do atributo do produto personalizado suspenso "sim / não"

10

Eu instalo o atributo com o seguinte 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();

Também tentei com $installer = new Mage_Catalog_Model_Resource_Eav_Mysql4_Setup('core_setup');

E então eu estou usando o valor do atributo em algum outro código. Mas eu sempre entendo null. Eu descobri que, o atributo não é definido como um valor padrão. Quando abro um produto - o menu suspenso mostra No, mas quando recebo seu valor no código, é null. Se eu clicar no menu suspenso, basta definir Noe salvar o produto - tudo funciona.

Como superar isso?

Syspect
fonte
para criar drop / attribute use magento.stackexchange.com/questions/12137/…
Amit Bera

Respostas:

14

Tente definir o valor padrão como string

'default' => '0'

ou vazio

'default' => ''

Atualizar

Os valores padrão são adicionados quando você adiciona um novo produto a produtos antigos que não afetam.

Tente corrigir isso no gerenciamento de produtos com ação em massa

Dentro de gerenciar produtos, há uma ação chamada "Atualizar atributos". Selecione todos os produtos que você deseja atualizar, selecione Atualizar atributos e adicione todas as novas informações.

oleksii.svarychevskyi
fonte
1
Eu já tentei isso e não funciona. :(
Syspect
3

Você deve definir o valor para toda a entidade existente 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);

fonte: /programming/4906497/default-attribute-value-for-all-product-in-magento . Veja a resposta de Asrar Malik.

Chuongnh
fonte
3

Eu tive o problema de que, com os trechos de código acima, um atributo select foi criado em vez de um atributo yes / no. Para consertar isso, eu tive que usar

'input'             => 'boolean'

ao invés de:

'input'             => 'select'
ahe_borriglione
fonte
0

Também não foi possível adicionar um valor padrão 0 a um atributo sim / não.

Portanto, usei um evento para adicionar o valor padrão 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
fonte
0

Para adicionar atributo customizado yes / no ao módulo magento create como mostrado abaixo.

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();
user46226
fonte