2012-07-24 18 views
5

En MySQL4-instalación-0.1.0.php, puedo añadir campo de texto personalizado en mi módulo de Magento como esto:¿Cómo agregar un campo de casillas de verificación personalizado al cliente en magento?

$entityTypeId  = $setup->getEntityTypeId('customer'); 
$attributeSetId = $setup->getDefaultAttributeSetId($entityTypeId); 
$attributeGroupId = $setup->getDefaultAttributeGroupId($entityTypeId, $attributeSetId); 

$setup->addAttribute('customer', 'resale', array(
    'input'   => 'text', 
    'type'   => 'varchar', 
    'label'   => 'Resale number', 
    'visible'  => 1, 
    'required'  => 1, 
    'user_defined' => 1, 
)); 

$setup->addAttributeToGroup(
$entityTypeId, 
$attributeSetId, 
$attributeGroupId, 
'resale', 
'999' //sort_order 
); 

$oAttribute = Mage::getSingleton('eav/config')->getAttribute('customer', 'resale'); 
$oAttribute->setData('used_in_forms', array('adminhtml_customer','customer_account_create')); 
$oAttribute->save(); 

también quiero añadir un campo de casilla de verificación. Agrego así:

$setup->addAttribute('customer', 'marketattended1', array(
    'input'   => 'checkbox', 
    'type'   => 'int', 
    'label'   => 'San Francisco International Gift Fair', 
    'visible'  => 1, 
    'required'  => 0, 
    'user_defined' => 1, 
)); 

$setup->addAttributeToGroup(
$entityTypeId, 
$attributeSetId, 
$attributeGroupId, 
'marketattended1', 
'999' //sort_order 
); 

$oAttribute = Mage::getSingleton('eav/config')->getAttribute('customer', 'marketattended1'); 
$oAttribute->setData('used_in_forms', array('adminhtml_customer','customer_account_create')); 
$oAttribute->save(); 

puedo ver mi campo casilla de verificación en admin/cliente, pero cuando estoy tratando de editar o añadir nuevo cliente que no va a salvar el cliente. Solo muestra el indicador "Espere por favor" para siempre. ¿Cómo hacer que esto funcione?

* Editar

llamada a un setAttribute función miembro() en un no-objeto

I encontraron esta respuesta de error o servidor.

* Editar

he cambiado el código de instalador:

$setup->addAttribute('customer', 'marketattended1', array(
    'input'   => 'boolean', 
    'type'   => 'int', 
    'label'   => 'San Francisco International Gift Fair', 
    'visible'  => 1, 
    'required'  => 0, 
    'user_defined' => 1, 
    //'source'  => 'eav/entity_attribute_source_boolean' 
)); 

$setup->addAttributeToGroup(
$entityTypeId, 
$attributeSetId, 
$attributeGroupId, 
'marketattended1', 
'999' //sort_order 
); 

$oAttribute = Mage::getSingleton('eav/config')->getAttribute('customer', 'marketattended1'); 
$oAttribute->setData('used_in_forms', array('adminhtml_customer','customer_account_create')); 
$oAttribute->save(); 

ahora puedo ver selecto componente con yes | no opciones y su trabajo a la perfección. También se muestra en el formulario de registro de clientes como este:

<div class="field"> 
    <label for="marketattended1">San Francisco International Gift Fair</label> 
    <select id="marketattended1" name="marketattended1" class=" select"> 
     <option value="0">No</option> 
     <option value="1">Yes</option> 
    </select></div> 

Quiero que sea la casilla de verificación. Lo he intentado así:

<div class="field"> 
     <input class="checkbox" id="marketattended1" onchange="[removed]changechecked()" type="checkbox" value="1" /> 
     <label class="required">*Others</label > 
    </div> 

Pero no lo salvará. ¿Cómo hacer que salve?

Respuesta

1

Lo hice funcionar con javascript. Oculto el elemento de selección y agrego la casilla de verificación con jQuery. Cambio el valor de la selección cuando el usuario hace clic en la casilla de verificación.

(function($){ 
    $(document).ready(function(){ 
     var selects = $('.checkselect'); 
     $.each(selects, function(index, select){ 
      var checkbox = "<input class='selectcheckbox' type='checkbox' value='0' />"; 
      $(select).append($(checkbox)); 
      $(select).find('select').hide(); 
      $(select).on('click', '.selectcheckbox', function(){ 
       if($(this).is(':checked')) 
        $(select).find('select').val('1'); 
       else 
        $(select).find('select').val('0'); 
      }); 
     }); 
    }); 
})(jQuery); 

No es la mejor solución, pero tengo que avanzar en el proyecto. Si alguien encuentra una mejor solución, responda aquí.

5

hay que añadir el nombre de la casilla de verificación:

<input class="checkbox" id="marketattended1" name="marketattended1" onchange="[removed]changechecked()" type="checkbox" value="1" /> 

entonces funciona

Cuestiones relacionadas