2011-12-08 13 views
7

Estoy desarrollando un sitio web con magento ver-1.6. Intento crear nuevos campos para el registro de clientes, pero no se crean. Seguí de la misma manera lo que seguimos en la versión 1.5.Cómo crear nuevos campos para el cliente

¿Alguna variación en crear campos de clientes en 1.6?

Respuesta

22

No sé qué probaste, así que solo voy a enumerar todos los pasos necesarios para agregar un nuevo atributo de cliente escolar al formulario de inscripción de Magento 1.6.1.

  1. Cree un módulo preferentemente, o coloque un código similar en un archivo .phtml y ejecútelo una vez. Si usted está haciendo esto adecuado y la creación de un módulo, código como este puesto en el archivo mysql_install:

    <?php 
    $installer = $this; 
    $installer->startSetup(); 
    $setup = Mage::getModel('customer/entity_setup', 'core_setup'); 
    $setup->addAttribute('customer', 'school', array(
        'type' => 'int', 
        'input' => 'select', 
        'label' => 'School', 
        'global' => 1, 
        'visible' => 1, 
        'required' => 0, 
        'user_defined' => 1, 
        'default' => '0', 
        'visible_on_front' => 1, 
         'source'=> 'profile/entity_school', 
    )); 
    if (version_compare(Mage::getVersion(), '1.6.0', '<=')) 
    { 
         $customer = Mage::getModel('customer/customer'); 
         $attrSetId = $customer->getResource()->getEntityType()->getDefaultAttributeSetId(); 
         $setup->addAttributeToSet('customer', $attrSetId, 'General', 'school'); 
    } 
    if (version_compare(Mage::getVersion(), '1.4.2', '>=')) 
    { 
        Mage::getSingleton('eav/config') 
        ->getAttribute('customer', 'school') 
        ->setData('used_in_forms', array('adminhtml_customer','customer_account_create','customer_account_edit','checkout_register')) 
        ->save(); 
    } 
    $installer->endSetup(); 
    ?> 
    
  2. En el archivo config.xml módulo. Tenga en cuenta que el nombre de mi módulo es Excellence_Profile.

    <profile_setup> <!-- Replace with your module name --> 
    <setup> 
        <module>Excellence_Profile</module> <!-- Replace with your module name --> 
        <class>Mage_Customer_Model_Entity_Setup</class> 
    </setup> 
    </profile_setup> 
    
  3. Aquí agregaremos nuestro atributo, al formulario de registro del cliente. En la versión 1.6.0 (+) el archivo phtml utilizado es persistance/customer/register.phtml y en la versión 1.6.0 (-) el archivo phtml utilizado es customer/form/register.phtml Por lo tanto, necesitamos abrir el archivo phtml, basado en la versión magento y agregar este código en la etiqueta .

    <li> 
    <?php 
    $attribute = Mage::getModel('eav/config')->getAttribute('customer','school'); 
    ?> 
    <label for="school" class="<?php if($attribute->getIsRequired() == true){?>required<?php } ?>"><?php if($attribute->getIsRequired() == true){?><em>*</em><?php } ?><?php echo $this->__('School') ?></label> 
    <div class="input-box"> 
    <select name="school" id="school" class="<?php if($attribute->getIsRequired() == true){?>required-entry<?php } ?>"> 
    <?php 
    $options = $attribute->getSource()->getAllOptions(); 
    foreach($options as $option){ 
    ?> 
    <option value='<?php echo $option['value']?>' <?php if($this->getFormData()->getSchool() == $option['value']){ echo 'selected="selected"';}?>><?php echo $this->__($option['label'])?></option> 
    <?php } ?> 
    </select> 
    </div> 
    </li> 
    
  4. para Magento 1.4.2 (+) que es todo lo que se requiere para la etapa de registro. Si crea un usuario desde aquí, debería ver el campo de texto de la escuela en admin. para Magento 1.4.1 (-), tenemos que hacer otra cosa que abrir el archivo config.xml y los módulos de añadir:

    <global> 
         <fieldsets> 
          <customer_account> 
           <school><create>1</create><update>1</update><name>1</name></school> 
          </customer_account> 
         </fieldsets> 
    </global> 
    
  5. vez, el usuario ha creado su cuenta en la> sección Información de la cuenta MyAccount- él debería poder editar el campo escolar también. Para ello, abra el archivo phtml customer/form/edit.phtml y poner en el código en el:

    <?php 
    <li> 
    <?php 
    $attribute = Mage::getModel('eav/config')->getAttribute('customer','school'); 
    ?> 
    <label for="is_active" class="<?php if($attribute->getIsRequired() == true){?>required<?php } ?>"><?php if($attribute->getIsRequired() == true){?><em>*</em><?php } ?><?php echo $this->__('School') ?></label> 
    <div class="input-box"> 
    <select name="school" id="school" class="<?php if($attribute->getIsRequired() == true){?>required-entry<?php } ?>"> 
    <?php 
    $options = $attribute->getSource()->getAllOptions(); 
    foreach($options as $option){ 
    ?> 
    <option value='<?php echo $option['value']?>' <?php if($this->getCustomer()->getSchool() == $option['value']){ echo 'selected="selected"';}?>><?php echo $this->__($option['label'])?></option> 
    <?php } ?> 
    </select> 
    </div> 
    </li> 
    
  6. un formulario de inscripción también se presenta en la página de pago en Magento. Para añadir que el campo aquí, tiene que editar checkout/onepage/billing.phtml para la versión de Magento 1.6 (-) y persistant/checkout/onepage/billing.phtml para la versión de Magento 1.6 (+) de archivos y luego encontrar el código:

    <?php if(!$this->isCustomerLoggedIn()): ?> 
    

    dentro de este si la condición añadir su campo

    <li> 
    <li> 
    <?php 
    $attribute = Mage::getModel('eav/config')->getAttribute('customer','school'); 
    ?> 
    <label for="school" class="<?php if($attribute->getIsRequired() == true){?>required<?php } ?>"><?php if($attribute->getIsRequired() == true){?><em>*</em><?php } ?><?php echo $this->__('School') ?></label> 
    <div class="input-box"> 
    <select name="billing[school]" id="school" class="<?php if($attribute->getIsRequired() == true){?>required-entry<?php } ?>"> 
    <?php 
    $options = $attribute->getSource()->getAllOptions(); 
    foreach($options as $option){ 
    ?> 
    <option value='<?php echo $option['value']?>'><?php echo $this->__($option['label'])?></option> 
    <?php } ?> 
    </select> 
    </div> 
    </li> 
    

    a continuación abra su config.xml módulo o cualquier otro archivo config.xml, añadir las siguientes líneas:

    <global> 
        <fieldsets> 
         <checkout_onepage_quote> 
         <customer_school> 
          <to_customer>school</to_customer> 
         </customer_school> 
         </checkout_onepage_quote> 
         <customer_account> 
          <school> 
           <to_quote>customer_school</to_quote> 
          </school> 
         </customer_account> 
         </fieldsets> 
        </global> 
    
  7. siguiente que necesitamos hacer algunos cambios en la tabla de cotizaciones, es decir, la tabla sales_flat_quote en magento. Si usted tiene un módulo a continuación, crear una versión de actualización de su archivo sql y poner en este código:

    $tablequote = $this->getTable('sales/quote'); 
    $installer->run(" 
    ALTER TABLE $tablequote ADD `customer_school` INT NOT NULL 
    "); 
    

Después de hacer esto, asegúrese de que se borre la memoria caché de Magento, específicamente “Magento Vaciar caché” y “Flush Almacenamiento en caché ". Ahora cuando realiza el pedido, el cliente se crea con el atributo correcto de la escuela.

+0

Gran materia Gracias! Para 'source' => 'profile/entity_school' necesitamos crear un modelo específico para eso, no lo necesitaba, pero para otros sería genial poner un ejemplo de eso. – Shadowbob

0

Tuve problemas para guardar los nuevos campos en el formulario checkout_register.

que tuvo que ampliar el nodo Global-> fieldsets:

<global> 
    <fieldsets> 
     <checkout_onepage_quote> 
      <customer_school> 
       <to_customer>school</to_customer> 
      </customer_school> 
     </checkout_onepage_quote> 

     <checkout_onepage_billing> 
      <school> 
       <to_customer>*</to_customer> 
      </school> 
     </checkout_onepage_billing> 

     <customer_account> 
      <school> 
       <to_quote>customer_school</to_quote> 
      </school> 
     </customer_account> 

     <sales_convert_order> 
      <customer_school> 
       <to_quote>*</to_quote> 
      </customer_school> 
     </sales_convert_order> 
    </fieldsets> 
</global> 
Cuestiones relacionadas