Как создать новые поля для клиента - PullRequest
7 голосов
/ 08 декабря 2011

Я разрабатываю веб-сайт с magento ver-1.6.Я пытаюсь создать новые поля для регистрации клиентов, но он не создан.Я следовал тому же пути, что и в версии 1.5.

Есть ли какие-либо изменения в полях создания клиентов в 1.6?

Ответы [ 2 ]

22 голосов
/ 08 декабря 2011

Я не знаю, что вы пытались сделать, поэтому я просто перечислю все шаги, необходимые для добавления нового атрибута клиента schooL в регистрационную форму Magento 1.6.1.

  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 Поэтому нам нужно открыть файл phtml, основанный на версии magento, и добавить этот код в тег.

    <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 (+) это все, что требуется для этапа регистрации. Если вы создаете пользователя отсюда, вы должны увидеть школьное текстовое поле в admin. Для 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. Далее нам нужно внести некоторые изменения в таблицу котировок, т.е. в таблицу sales_flat_quote в magento. Если у вас есть модуль, создайте обновленную версию файла sql и введите следующий код:

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

После этого обязательно очистите кэш magento, в частности, «Flush Magento Cache» и «Flush Cache Storage». Теперь, когда вы размещаете заказ, клиент создается с правильным школьным атрибутом.

0 голосов
/ 05 ноября 2014

У меня были проблемы с сохранением новых полей в форме checkout_register.

Мне пришлось расширить узел 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>
...