2016-05-03 49 views
10

Ho creato un attributo personalizzato seguente usando i moduli.Come aggiungere ulteriore campo "Elenco a discesa" in Magento One Page Checkout

Questo è l'attributo Elenco a discesa per Cliente.

Dovrebbe essere visualizzato nella pagina di pagamento (Cliente come ospite/utente esistente) Pagina account cliente, Account cliente Crea/Pagina di registro, Pagina di modifica cliente amministratore.

Attualmente sono in grado di visualizzare l'attributo nella sezione Amministrazione in Indirizzo cliente.

Desidero che questo attributo venga visualizzato nella pagina di pagamento anche nella sezione indirizzo del cliente.

Ho il file di controllo billing.phtml, così come altri attributi sono scritti in modo statico, ma non sono sicuro. Come scrivere l'attributo personalizzato in billing.phtml come elenco a discesa. e quale altro file è necessario aggiornare per visualizzare questo attributo. Per favore fatemi sapere dove sto sbagliando o qualcos'altro da aggiungere al mio codice.

Qualsiasi consiglio sarebbe apprezzato.

Qui di seguito è il mio codice -

Nome File -/app/code/local/PS/PB/etc/config.xml

<?xml version="1.0"?> 
<config> 
    <modules> 
    <PS_PB> 
     <version>0.1.0</version> 
    </PS_PB> 
    </modules> 
    <global> 
    <helpers> 
     <pb> 
     <class>PS_PB_Helper</class> 
     </pb> 
    </helpers> 
    <models> 
     <pb> 
     <class>PS_PB_Model</class> 
     <resourceModel>pb_mysql4</resourceModel> 
     </pb> 
    </models> 
    <resources> 
     <customerattribute1462360584_setup> 
     <setup> 
      <module>PS_P</module> 
      <class>Mage_Customer_Model_Entity_Setup</class> 
     </setup> 
     <connection> 
      <use>core_setup</use> 
     </connection> 
     </customerattribute1462360584_setup> 
     <customerattribute1462360584_write> 
     <connection> 
      <use>core_write</use> 
     </connection> 
     </customerattribute1462360584_write> 
     <customerattribute1462360584_read> 
     <connection> 
      <use>core_read</use> 
     </connection> 
     </customerattribute1462360584_read> 
    </resources> 
    </global> 
</config> 

File -/app/code/local/PS/PB/Helper/Data.php

<?php 
class PS_PB_Helper_Data extends Mage_Core_Helper_Abstract 
{ 
} 

File -/app/code/local/PS/PB/Model/Eav/Entity/Attribute/Source/Customeroptions14623605840.php

<?php 
class PS_PB_Model_Eav_Entity_Attribute_Source_Customeroptions14623605840 extends Mage_Eav_Model_Entity_Attribute_Source_Abstract 
{ 
    /** 
    * Retrieve all options array 
    * 
    * @return array 
    */ 
    public function getAllOptions() 
    { 
     if (is_null($this->_options)) { 
      $this->_options = array(

       array(
        "label" => Mage::helper("eav")->__("End Consumer/DIY"), 
        "value" => 1 
       ), 

       array(
        "label" => Mage::helper("eav")->__("Service Technician"), 
        "value" => 2 
       ), 

       array(
        "label" => Mage::helper("eav")->__("Other Professional"), 
        "value" => 3 
       ), 

      ); 
     } 
     return $this->_options; 
    } 

    /** 
    * Retrieve option array 
    * 
    * @return array 
    */ 
    public function getOptionArray() 
    { 
     $_options = array(); 
     foreach ($this->getAllOptions() as $option) { 
      $_options[$option["value"]] = $option["label"]; 
     } 
     return $_options; 
    } 

    /** 
    * Get a text for option value 
    * 
    * @param string|integer $value 
    * @return string 
    */ 
    public function getOptionText($value) 
    { 
     $options = $this->getAllOptions(); 
     foreach ($options as $option) { 
      if ($option["value"] == $value) { 
       return $option["label"]; 
      } 
     } 
     return false; 
    } 

    /** 
    * Retrieve Column(s) for Flat 
    * 
    * @return array 
    */ 
    public function getFlatColums() 
    { 
     $columns = array(); 
     $columns[$this->getAttribute()->getAttributeCode()] = array(
      "type"  => "tinyint(1)", 
      "unsigned" => false, 
      "is_null" => true, 
      "default" => null, 
      "extra"  => null 
     ); 

     return $columns; 
    } 

    /** 
    * Retrieve Indexes(s) for Flat 
    * 
    * @return array 
    */ 
    public function getFlatIndexes() 
    { 
     $indexes = array(); 

     $index = "IDX_" . strtoupper($this->getAttribute()->getAttributeCode()); 
     $indexes[$index] = array(
      "type"  => "index", 
      "fields" => array($this->getAttribute()->getAttributeCode()) 
     ); 

     return $indexes; 
    } 

    /** 
    * Retrieve Select For Flat Attribute update 
    * 
    * @param int $store 
    * @return Varien_Db_Select|null 
    */ 
    public function getFlatUpdateSelect($store) 
    { 
     return Mage::getResourceModel("eav/entity_attribute") 
      ->getFlatUpdateSelect($this->getAttribute(), $store); 
    } 
} 

File -/app/code/local/PS/PB/sql/customerattribute1462360584_setup

<?php 
    $installer = $this; 
    $installer->startSetup(); 


    $installer->addAttribute("customer_address", "cstpb", array(
     "type"  => "int", 
     "backend" => "", 
     "label" => "Primary Business", 
     "input" => "select", 
     "source" => "pb/eav_entity_attribute_source_customeroptions14623605840", 
     "visible" => true, 
     "required" => true, 
     "default" => "", 
     "frontend" => "", 
     "unique"  => false, 
     "note"  => "" 

     )); 

      $attribute = Mage::getSingleton("eav/config")->getAttribute("customer_address", "cstpb"); 


    $used_in_forms=array(); 
    $used_in_forms[]="adminhtml_customer"; 
    $used_in_forms[]="checkout_register"; 
    $used_in_forms[]="customer_account_create"; 
    $used_in_forms[]="customer_account_edit"; 
    $used_in_forms[]="adminhtml_checkout"; 
    $used_in_forms[]="adminhtml_customer_address"; 
    $used_in_forms[]="customer_register_address"; 
    $used_in_forms[]="customer_address_edit"; 
      $attribute->setData("used_in_forms", $used_in_forms) 
      ->setData("is_used_for_customer_segment", true) 
      ->setData("is_system", 0) 
      ->setData("is_user_defined", 1) 
      ->setData("is_visible", 1) 
      ->setData("sort_order", 100) 
      ; 
      $attribute->save(); 



    $installer->endSetup(); 

XML File -/app/etc/modules/PS_PB.xml

<?xml version="1.0"?> 
<config> 
    <modules> 
    <PS_PB> 
     <active>true</active> 
     <codePool>local</codePool> 
     <version>0.1.0</version> 
    </PS_PB> 
    </modules> 
</config> 

Aggiornamenti

Dopo aver effettuato la correzione nel file config.xml, funziona correttamente.

Per controllare gli errori in config.xml, aprire questo file nel browser dopo aver modificato in> qualsiasi editor in modo che mostri l'errore.

Ora l'attributo sta visualizzando la pagina di checkout e la pagina del cliente admin e cliente il mio account ma in questa sezione. Non sono in grado di aggiornarlo. Quali campi devono essere aggiunti in config.xml per tag customer_account.

ho aggiunto come questo in config.xml

<customer_account> 
    <primary_business> 
     <create>1</create> 
     <update>1</update> 
    </primary_business> 
</customer_account> 
+0

Avete ancora problemi che mostrano l'attributo sulle pagine di pagamento? Quale versione di Magento stai usando? – codedge

+0

Inoltre perché sei aggiungere l'attributo al 'address' cliente e non a' 'del cliente? Come ho capito un "tecnico di servizio" f. ex. è qualcosa che è collegato a un cliente e _non_ un indirizzo. – codedge

+0

@codedge Sì, ho ancora problemi con l'aggiunta di attributi. Ora mio attributo viene aggiunto al front-end e pagina di checkout, ma voglio aggiungere con Firecheckout modello non con core Magento Files. Quali campi devono essere aggiunti nel file di configurazione per chiamare qualsiasi classe e il suo metodo. –

risposta

1

vostro installare codice di script sembra giusto per me anche se non ho eseguo alla prova.

Per prima cosa, assicurarsi che il proprio script di installazione è in esecuzione.

In secondo luogo,

È possibile creare l'attributo "cliente" attraverso l'amministratore navigando ai Clienti> Attributi> Gestisci attributi.

http://awesomescreenshot.com/0b35uq1542

Magento dovrebbe essere visualizzato l'attributo nelle aree configurate se si comporta come dovrebbe. Ti consiglio di iniziare creando manualmente l'attributo e verificando se viene visualizzato. In caso contrario, è possibile che il tema o altre estensioni abbiano sostituito il codice responsabile del rendering di tali attributi.

Una volta che conosci il tema sta rendendo ciò che si vuole, dove si vuole, è possibile creare uno script sandbox per caricare il tuo attributi e ottenere i dati. Guardando i dati degli attributi creati "Admin" normalmente mi viene mostrato ciò che mi mancava.

Qualcosa di simile a questo:

<?php 

require_once('app/Mage.php'); 
Mage::app()->setCurrentStore('0'); 
$attribute_id = 9999; // YOU ADMIN CREATED ATTRIBUTE ID 
$attributeModel = Mage::getModel('eav/attribute')->load($attribute_id); 
var_dump($attributeModel->getData()); 
+1

Gestione attribs dei clienti in Magento è una caratteristica direttamente EE. Ecco perché è necessario installarlo tramite un'estensione personalizzata nel CE: il codice fornito nell'OP funziona. – codedge