2011-12-08 112 views
7

我正在開發一個帶有magento ver-1.6的網站。我嘗試爲客戶註冊創建新字段,但未創建。我遵循的是我們在1.5版本中遵循的方式。如何爲客戶創建新字段

1.6中創建客戶字段的任何變化?

回答

22

我不知道你所做的是什麼,所以我只列出爲Magento 1.6.1註冊表單添加一個新的schooL客戶屬性所需的所有步驟。

  1. 最好創建一個模塊,或者在某些.phtml文件中放置相似的代碼並運行一次。如果你這樣做是正確的,並創建一個模塊,把這樣的代碼到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. 在你的模塊config.xml文件。請注意,我的模塊的名稱是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. 這裏我們將把我們的屬性添加到客戶註冊表中。在版本1.6.0(+)中使用的phtml文件是persistance/customer/register.phtml和版本1.6.0( - )所使用的phtml文件是customer/form/register.phtml 因此,我們需要打開基於magento版本的phtml文件,並在代碼中添加此代碼。

    <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. 對於magento的1.4.2(+),其是所有所需的配準步驟。如果您從此處創建用戶,則應該在管理員中看到學校文本字段。 對於Magento的1.4.1( - ),我們需要做的另一件事打開你的模塊config.xml文件並添加:

    <global> 
         <fieldsets> 
          <customer_account> 
           <school><create>1</create><update>1</update><name>1</name></school> 
          </customer_account> 
         </fieldsets> 
    </global> 
    
  5. 一旦,用戶已經創建了他的賬戶在MyAccount->帳戶信息部分他也應該能夠編輯學校領域。對於本打開PHTML文件customer/form/edit.phtml,並把代碼中:

    <?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. 登記表也以在Magento結賬頁面顯示出來。在這裏添加您現場,你需要編輯checkout/onepage/billing.phtml爲Magento的1.6版本( - )和persistant/checkout/onepage/billing.phtml的Magento的版本1.6(+)文件,然後找到代碼:

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

    這裏面如果條件添加你的領域

    <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> 
    

    下一頁打開模塊的config.xml或任何其他config.xml文件,添加以下行:

    <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. 接下來,我們需要對magento中的報價表(即sales_flat_quote表)進行一些更改。如果你有一個模塊,然後創建您的SQL文件的升級版本,並把這個代碼:

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

做這個一定要清楚你的Magento緩存,特別是「同花順的Magento緩存」和「清除之後緩存存儲「。 現在,當您下訂單時,將使用正確的學校屬性創建客戶。

+0

偉大的東西謝謝!對於'source'=>'profile/entity_school',我們需要爲那個創建一個特定的模型,我不需要它,但是對於其他人來說,將其作爲一個很酷的例子。 – Shadowbob

0

我在checkout_register表單中保存新字段時遇到了問題。

我不得不延長全球 - >字段集節點:

<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>