2

フロントエンドの顧客からの入力を収集するために、登録フォームに2つのカスタム属性を追加しました。

私の問題は、フロントエンド登録フォームのデータがデータベースに保存されていないことです。

管理エリアのこれらのフィールドに入力したデータはすべて保存されていますが、顧客から情報を収集する必要があります。これが私のコードです:

app / code / local / Symphony / Khaos / sql / khaos_setup / mysql4-upgrade-0.1.12-0.1.13.php(はい、私はこれを数回正しくしようとしました;))

<?php 

$installer = $this;

$installer->startSetup();


$installer->addAttribute('customer', 'source', array(
    'input' => 'text',
    'type' => 'varchar',
    'label' => 'Where did you hear about us?',
    'visible' => 1,
    'required' => 0,
    'position' => 1,
    'sort_order' => 80,        
));

$installer->addAttribute('customer', 'practitioner_referrer', array(
    'input' => 'text',
    'type' => 'varchar',
    'label' => 'Referring practitioner',
    'visible' => 1,
    'required' => 0,
    'position' => 1,
    'sort_order' => 80,        
));


$installer->endSetup();

$customer = Mage::getModel('customer/attribute')->loadByCode('customer', 'source');
$forms= array('customer_account_edit', 'customer_account_create', 'adminhtml_customer', 'checkout_register');
$customer->setData('used_in_forms', $forms);
$customer->save(); 

$customer = Mage::getModel('customer/attribute')->loadByCode('customer', 'practitioner_referrer');
$forms= array('customer_account_edit', 'customer_account_create', 'adminhtml_customer', 'checkout_register');
$customer->setData('used_in_forms', $forms);
$customer->save(); 

app / code / local / Symphony / Khaos / Model / Entity / Setup.php

    <?php 
class Symphony_Khaos_Model_Entity_Setup extends Mage_Customer_Model_Entity_Setup
{
    public function getDefaultEntities(){

        return array(

                'source'=>array(
                        'type'=> 'static',
                        'label'=> 'source',
                        'visiable' => true,
                        'required' => false,
                        'sort_order' => 80,
                ),

                'practitioner_referrer'=>array(
                        'type'=> 'static',
                        'label'=> 'practitioner_referrer',
                        'visiable' => true,
                        'required' => false,
                        'sort_order' => 80,
                )

        );
    }
} 

app / code / local / Symphony / Khaos / etc / config.xml

    <?xml version="1.0"?>
<!-- 
/**
 * @category   Symphony
 * @package    Symphony_Khaos
 * @author     ModuleCreator
 * @license    http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
 */
 -->
<config>
    <modules>
        <Symphony_Khaos>
            <version>0.1.13</version>
        </Symphony_Khaos>
    </modules>
    <frontend>
        <routers>
            <khaos>
                <use>standard</use>
                <args>
                    <module>Symphony_Khaos</module>
                    <frontName>khaos</frontName>
                </args>
            </khaos>
        </routers>
        <layout>
            <updates>
                <khaos>
                    <file>khaos.xml</file>
                </khaos>
            </updates>
        </layout>
    </frontend>
    <admin>
        <routers>
            <khaos>
                <use>admin</use>
                <args>
                    <module>Symphony_Khaos</module>
                    <frontName>khaos</frontName>
                </args>
            </khaos>
        </routers>
    </admin>
    <adminhtml>
        <menu>
            <khaos module="khaos">
                <title>Khaos</title>
                <sort_order>71</sort_order>               
                <children>
                    <items module="khaos">
                        <title>Manage Items</title>
                        <sort_order>0</sort_order>
                        <action>khaos/adminhtml_khaos</action>
                    </items>
                </children>
            </khaos>
        </menu>
        <acl>
            <resources>
                <all>
                    <title>Allow Everything</title>
                </all>
                <admin>
                    <children>
                        <Symphony_Khaos>
                            <title>Khaos Module</title>
                            <sort_order>10</sort_order>
                        </Symphony_Khaos>
                    </children>
                </admin>
            </resources>
        </acl>
        <layout>
            <updates>
                <khaos>
                    <file>khaos.xml</file>
                </khaos>
            </updates>
        </layout>
    </adminhtml>   
    <global>
        <models>
            <khaos>
                <class>Symphony_Khaos_Model</class>
                <resourceModel>khaos_mysql4</resourceModel>
            </khaos>
            <khaos_mysql4>
                <class>Symphony_Khaos_Model_Mysql4</class>
                <entities>
                    <khaos>
                        <table>khaos</table>
                    </khaos>
                </entities>
            </khaos_mysql4>
        </models>
        <resources>
            <khaos_setup>
                <setup>
                    <module>Symphony_Khaos</module>
                    <class>Symphony_Khaos_Model_Entity_Setup</class>
                </setup>
                <connection>
                    <use>core_setup</use>
                </connection>
            </khaos_setup>
            <khaos_write>
                <connection>
                    <use>core_write</use>
                </connection>
            </khaos_write>
            <khaos_read>
                <connection>
                    <use>core_read</use>
                </connection>
            </khaos_read>          
        </resources>
        <blocks>
            <khaos>
                <class>Symphony_Khaos_Block</class>
            </khaos>
        </blocks>
        <helpers>
            <khaos>
                <class>Symphony_Khaos_Helper</class>
            </khaos>
        </helpers>   
        <fieldsets>
            <customer_account>
                <source><create>1</create><update>1</update></source>
                <practitioner_referrer><create>1</create><update>1</update></practitioner_referrer>
            </customer_account>
        </fieldsets>   
    </global>
</config>

app / design / frontend / metabolics / default / template / persistent / checkout / onepage / billing.phtml

<?php
/**
 * Magento
 *
 * NOTICE OF LICENSE
 *
 * This source file is subject to the Academic Free License (AFL 3.0)
 * that is bundled with this package in the file LICENSE_AFL.txt.
 * It is also available through the world-wide-web at this URL:
 * http://opensource.org/licenses/afl-3.0.php
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@magentocommerce.com so we can send you a copy immediately.
 *
 * DISCLAIMER
 *
 * Do not edit or add to this file if you wish to upgrade Magento to newer
 * versions in the future. If you wish to customize Magento for your
 * needs please refer to http://www.magentocommerce.com for more information.
 *
 * @category    design
 * @package     base_default
 * @copyright   Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
 * @license     http://opensource.org/licenses/afl-3.0.php  Academic Free License (AFL 3.0)
 */
/** @var Mage_Checkout_Block_Onepage_Billing $this */
?>
<form id="co-billing-form" action="">
<fieldset>
    <ul class="form-list">
    <?php if ($this->customerHasAddresses()): ?>
        <li class="wide">
            <label for="billing-address-select"><?php echo $this->__('Select a billing address from your address book or enter a new address.') ?></label>
            <div class="input-box">
                <?php echo $this->getAddressesHtmlSelect('billing') ?>
            </div>
        </li>
    <?php endif; ?>
    <li id="billing-new-address-form"<?php if ($this->customerHasAddresses()): ?> style="display:none;"<?php endif; ?>>
        <fieldset>
            <input type="hidden" name="billing[address_id]" value="<?php echo $this->getAddress()->getId() ?>" id="billing:address_id" />
            <ul>
                <li class="fields"><?php echo $this->getLayout()->createBlock('customer/widget_name')->setObject($this->getAddress()->getFirstname() ? $this->getAddress() : $this->getQuote()->getCustomer())->setForceUseCustomerRequiredAttributes(!$this->isCustomerLoggedIn())->setFieldIdFormat('billing:%s')->setFieldNameFormat('billing[%s]')->toHtml() ?></li>
                <li class="fields">
                    <div class="field">
                        <label for="billing:company"><?php echo $this->__('Company') ?></label>
                        <div class="input-box">
                            <input type="text" id="billing:company" name="billing[company]" value="<?php echo $this->escapeHtml($this->getAddress()->getCompany()) ?>" title="<?php echo $this->__('Company') ?>" class="input-text <?php echo $this->helper('customer/address')->getAttributeValidationClass('company') ?>" />
                        </div>
                    </div>
        <?php if(!$this->isCustomerLoggedIn()): ?>
                    <div class="field">
                        <label for="billing:email" class="required"><em>*</em><?php echo $this->__('Email Address') ?></label>
                        <div class="input-box">
                            <input type="text" name="billing[email]" id="billing:email" value="<?php echo $this->escapeHtml($this->getAddress()->getEmail()) ?>" title="<?php echo $this->__('Email Address') ?>" class="input-text validate-email required-entry" />
                        </div>
                    </div>
        <?php endif; ?>
                </li>
        <?php $_streetValidationClass = $this->helper('customer/address')->getAttributeValidationClass('street'); ?>
                <li class="wide">
                    <label for="billing:street1" class="required"><em>*</em><?php echo $this->__('Address') ?></label>
                    <div class="input-box">
                        <input type="text" title="<?php echo $this->__('Street Address') ?>" name="billing[street][]" id="billing:street1" value="<?php echo $this->escapeHtml($this->getAddress()->getStreet(1)) ?>" class="input-text <?php echo $_streetValidationClass ?>" />
                    </div>
                </li>
        <?php $_streetValidationClass = trim(str_replace('required-entry', '', $_streetValidationClass)); ?>
        <?php for ($_i = 2, $_n = $this->helper('customer/address')->getStreetLines(); $_i <= $_n; $_i++): ?>
                <li class="wide">
                    <div class="input-box">
                        <input type="text" title="<?php echo $this->__('Street Address %s', $_i) ?>" name="billing[street][]" id="billing:street<?php echo $_i ?>" value="<?php echo $this->escapeHtml($this->getAddress()->getStreet($_i)) ?>" class="input-text <?php echo $_streetValidationClass ?>" />
                    </div>
                </li>
        <?php endfor; ?>
                <?php if ($this->helper('customer/address')->isVatAttributeVisible()) : ?>
                <li class="wide">
                    <label for="billing:vat_id"><?php echo $this->__('VAT Number') ?></label>
                    <div class="input-box">
                        <input type="text" id="billing:vat_id" name="billing[vat_id]" value="<?php echo $this->escapeHtml($this->getAddress()->getVatId()) ?>" title="<?php echo $this->__('VAT Number') ?>" class="input-text <?php echo $this->helper('customer/address')->getAttributeValidationClass('vat_id') ?>" />
                    </div>
                </li>
                <?php endif; ?>
                <li class="fields">
                    <div class="field">
                        <label for="billing:city" class="required"><em>*</em><?php echo $this->__('City') ?></label>
                        <div class="input-box">
                            <input type="text" title="<?php echo $this->__('City') ?>" name="billing[city]" value="<?php echo $this->escapeHtml($this->getAddress()->getCity()) ?>" class="input-text <?php echo $this->helper('customer/address')->getAttributeValidationClass('city') ?>" id="billing:city" />
                        </div>
                    </div>
                    <div class="field">
                        <label for="billing:region_id" class="required"><em>*</em><?php echo $this->__('State/Province') ?></label>
                        <div class="input-box">
                            <select id="billing:region_id" name="billing[region_id]" title="<?php echo $this->__('State/Province') ?>" class="validate-select" style="display:none;">
                                <option value=""><?php echo $this->__('Please select region, state or province') ?></option>
                            </select>
                            <script type="text/javascript">
                            //<![CDATA[
                                $('billing:region_id').setAttribute('defaultValue',  "<?php echo $this->getAddress()->getRegionId() ?>");
                            //]]>
                            </script>
                            <input type="text" id="billing:region" name="billing[region]" value="<?php echo $this->escapeHtml($this->getAddress()->getRegion()) ?>"  title="<?php echo $this->__('State/Province') ?>" class="input-text <?php echo $this->helper('customer/address')->getAttributeValidationClass('region') ?>" style="display:none;" />
                        </div>
                    </div>
                </li>
                <li class="fields">
                    <div class="field">
                        <label for="billing:postcode" class="required"><em>*</em><?php echo $this->__('Zip/Postal Code') ?></label>
                        <div class="input-box">
                            <input type="text" title="<?php echo $this->__('Zip/Postal Code') ?>" name="billing[postcode]" id="billing:postcode" value="<?php echo $this->escapeHtml($this->getAddress()->getPostcode()) ?>" class="input-text validate-zip-international <?php echo $this->helper('customer/address')->getAttributeValidationClass('postcode') ?>" />
                        </div>
                    </div>
                    <div class="field">
                        <label for="billing:country_id" class="required"><em>*</em><?php echo $this->__('Country') ?></label>
                        <div class="input-box">
                            <?php echo $this->getCountryHtmlSelect('billing') ?>
                        </div>
                    </div>
                </li>
                <li class="fields">
                    <div class="field">
                        <label for="billing:telephone" class="required"><em>*</em><?php echo $this->__('Telephone') ?></label>
                        <div class="input-box">
                            <input type="text" name="billing[telephone]" value="<?php echo $this->escapeHtml($this->getAddress()->getTelephone()) ?>" title="<?php echo $this->__('Telephone') ?>" class="input-text <?php echo $this->helper('customer/address')->getAttributeValidationClass('telephone') ?>" id="billing:telephone" />
                        </div>
                    </div>
                    <div class="field">
                        <label for="billing:fax"><?php echo $this->__('Fax') ?></label>
                        <div class="input-box">
                            <input type="text" name="billing[fax]" value="<?php echo $this->escapeHtml($this->getAddress()->getFax()) ?>" title="<?php echo $this->__('Fax') ?>" class="input-text <?php echo $this->helper('customer/address')->getAttributeValidationClass('fax') ?>" id="billing:fax" />
                        </div>
                    </div>
                </li>
                <?php if(!$this->isCustomerLoggedIn()): ?>

        <?php $_dob = $this->getLayout()->createBlock('customer/widget_dob') ?>
        <?php $_gender = $this->getLayout()->createBlock('customer/widget_gender') ?>
            <?php if ($_dob->isEnabled() || $_gender->isEnabled()): ?>
                <li class="fields">
                <?php if ($_dob->isEnabled()): ?>
                    <div class="field">
                        <?php echo $_dob->setDate($this->getQuote()->getCustomerDob())->setFieldIdFormat('billing:%s')->setFieldNameFormat('billing[%s]')->toHtml() ?>
                    </div>
                <?php endif; ?>
                <?php if ($_gender->isEnabled()): ?>
                    <div class="field">
                        <?php echo $_gender->setGender($this->getQuote()->getCustomerGender())->setFieldIdFormat('billing:%s')->setFieldNameFormat('billing[%s]')->toHtml() ?>
                    </div>
                <?php endif ?>
                </li>
            <?php endif ?>

            <?php if ($this->isTaxvatEnabled()):?>
                <li><?php echo $this->getTaxvatHtml() ?></li>
            <?php endif; ?>

            <div class="fieldset">
            <ul class="form-list">
                <li class="fields">
                    <div class="field">
                        <label for="source" class="required"><em>*</em><?php echo $this->__('Where did you hear about us?') ?></label>
                        <div class="input-box">
                            <input type="text" name="source" id="source" title="<?php echo $this->__('source') ?>" class="input-text required-entry" />
                        </div>
                    </div>
                    <div class="field">
                        <label for="practitioner_referrer"><?php echo $this->__('Were you referrered by a practitioner, if so, who?') ?></label>
                        <div class="input-box">
                            <input type="text" name="practitioner_referrer" id="practitioner_referrer" title="<?php echo $this->__('practitioner_referrer') ?>" class="input-text" />
                        </div>
                    </div>
                </li>
            </ul>
        </div>

                <li class="fields" id="register-customer-password">
                    <div class="field">
                        <label for="billing:customer_password" class="required"><em>*</em><?php echo $this->__('Password') ?></label>
                        <div class="input-box">
                            <input type="password" name="billing[customer_password]" id="billing:customer_password" title="<?php echo $this->__('Password') ?>" class="input-text required-entry validate-password" />
                        </div>
                    </div>
                    <div class="field">
                        <label for="billing:confirm_password" class="required"><em>*</em><?php echo $this->__('Confirm Password') ?></label>
                        <div class="input-box">
                            <input type="password" name="billing[confirm_password]" title="<?php echo $this->__('Confirm Password') ?>" id="billing:confirm_password" class="input-text required-entry validate-cpassword" />
                        </div>
                    </div>
                </li>
                <?php echo $this->getChildHtml('persistent.remember.me'); ?>
                <?php endif; ?>
                <?php if ($this->isCustomerLoggedIn() && $this->customerHasAddresses()):?>
                    <li class="control">
                        <input type="checkbox" name="billing[save_in_address_book]" value="1" title="<?php echo $this->__('Save in address book') ?>" id="billing:save_in_address_book" onchange="if(window.shipping) shipping.setSameAsBilling(false);"<?php if ($this->getAddress()->getSaveInAddressBook()):?> checked="checked"<?php endif;?> class="checkbox" /><label for="billing:save_in_address_book"><?php echo $this->__('Save in address book') ?></label>
                    </li>
                <?php else:?>
                    <li class="no-display"><input type="hidden" name="billing[save_in_address_book]" value="1" /></li>
                <?php endif; ?>
                <?php echo $this->getChildHtml('form.additional.info'); ?>
            </ul>
            <?php echo $this->getChildHtml('persistent.remember.me.tooltip'); ?>
        </fieldset>
     </li>
    <?php if ($this->canShip()): ?>
        <li class="control">
            <input type="radio" name="billing[use_for_shipping]" id="billing:use_for_shipping_yes" value="1"<?php if ($this->isUseBillingAddressForShipping()) {?> checked="checked"<?php }?> title="<?php echo  $this->__('Ship to this address') ?>" onclick="$('shipping:same_as_billing').checked = true;" class="radio" /><label for="billing:use_for_shipping_yes"><?php echo  $this->__('Ship to this address') ?></label></li>
        <li class="control">
            <input type="radio" name="billing[use_for_shipping]" id="billing:use_for_shipping_no" value="0"<?php if (!$this->isUseBillingAddressForShipping()) {?> checked="checked"<?php }?> title="<?php echo $this->__('Ship to different address') ?>" onclick="$('shipping:same_as_billing').checked = false;" class="radio" /><label for="billing:use_for_shipping_no"><?php echo $this->__('Ship to different address') ?></label>
        </li>
    <?php endif; ?>
    </ul>
    <?php if (!$this->canShip()): ?>
        <input type="hidden" name="billing[use_for_shipping]" value="1" />
    <?php endif; ?>
    <div class="buttons-set" id="billing-buttons-container">
        <p class="required"><?php echo $this->__('* Required Fields') ?></p>
        <button type="button" title="<?php echo $this->__('Continue') ?>" class="button" onclick="billing.save()"><span><span><?php echo $this->__('Continue') ?></span></span></button>
        <span class="please-wait" id="billing-please-wait" style="display:none;">
            <img src="<?php echo $this->getSkinUrl('images/opc-ajax-loader.gif') ?>" alt="<?php echo $this->__('Loading next step...') ?>" title="<?php echo $this->__('Loading next step...') ?>" class="v-middle" /> <?php echo $this->__('Loading next step...') ?>
        </span>
    </div>
</fieldset>
</form>
<script type="text/javascript">
//<![CDATA[
    var billing = new Billing('co-billing-form', '<?php echo $this->getUrl('checkout/onepage/getAddress') ?>address/', '<?php echo $this->getUrl('checkout/onepage/saveBilling') ?>');
    var billingForm = new VarienForm('co-billing-form');

    //billingForm.setElementsRelation('billing:country_id', 'billing:region', '<?php echo $this->getUrl('directory/json/childRegion') ?>', '<?php echo $this->__('Select State/Province...') ?>');
    $('billing-address-select') && billing.newAddress(!$('billing-address-select').value);

    var billingRegionUpdater = new RegionUpdater('billing:country_id', 'billing:region', 'billing:region_id', <?php echo $this->helper('directory')->getRegionJson() ?>, undefined, 'billing:postcode');
    if ($('onepage-guest-register-button')) {
        Event.observe($('onepage-guest-register-button'), 'click', function(event) {
            var billingRememberMe = $('co-billing-form').select('#remember-me-box');
            if (billingRememberMe.length > 0) {
                if ($('login:guest') && $('login:guest').checked) {
                    billingRememberMe[0].hide();
                } else if ($('login:register') && ($('login:register').checked || $('login:register').type == 'hidden')) {
                    billingRememberMe[0].show();
                }
            }
        });
    }
//]]>
</script>

どんな助けでも大歓迎です。

敬具、

ジェームズ

4

2 に答える 2

6

あなたの解決策は素晴らしいです、それは実用的なものに近いです、しかしそれはいくつかの最終的な仕上げを欠いています。

お客様は、「登録」リンクまたはチェックアウト中に2つの方法で登録できることに注意してください。チェックアウトプロセスのテンプレートコードのみを提供したので、それについてのみ説明します。「登録」リンクの実装ははるかに簡単で、すでに上記で提供されている記事でうまく説明されているようです:http ://www.fontis.com.au/blog/magento/know-more-about-your -customers-adding-custom-signup-attributes

はい、チェックアウトについてです。現在のソリューションの問題は次のとおりです。

  1. 入力の名前が間違っています。する必要がありますbilling[<attribute_name>]
  2. データは、チェックアウトプロセス中にどこかに保存し(見積もりテーブルの新しい列が必要)、注文時に顧客プロファイルに保存する必要があります(フィールドセットルールが必要です)

問題に対処しましょう。

テンプレートファイルの修正は簡単です。入力の名前を変更するだけです。次のようになります。

...

<input type="text" name="billing[source]" id="source" title="<?php echo 
$this->__('source') ?>" class="input-text required-entry" />

...

<input type="text" name="billing[practitioner_referrer]" id="practitioner_referrer"
title="<?php echo $this->__('practitioner_referrer') ?>" class="input-text" />

...

これにより、Magentoは入力されたデータを予想される場所で検索します。

正しいSQLファイル(つまり、mysql4-upgrade-0.1.12-0.1.13.php)は次のようになります。

$installer->startSetup();

$installer->getConnection()->addColumn(
    $installer->getTable('sales/quote'),
    'customer_source',
    array(
        'type'      => Varien_Db_Ddl_Table::TYPE_TEXT,
        'length'    => '64K',
        'comment'   => 'Customer Source'
    )
);

$installer->getConnection()->addColumn(
    $installer->getTable('sales/quote'),
    'customer_practitioner_referrer',
    array(
        'type'      => Varien_Db_Ddl_Table::TYPE_TEXT,
        'length'    => '64K',
        'comment'   => 'Customer Practitioner Referrer'
    )
);

$installer->addAttribute('customer', 'source', array(
    'input' => 'text',
    'type' => 'varchar',
    'label' => 'Where did you hear about us?',
    'visible' => 1,
    'required' => 0,
    'position' => 1,
    'sort_order' => 80
));

$installer->addAttribute('customer', 'practitioner_referrer',
    array(
        'input' => 'text',
        'type' => 'varchar',
        'label' => 'Referring practitioner',
        'visible' => 1,
        'required' => 0,
        'position' => 1,
        'sort_order' => 80
    )
);

$installer->endSetup();

$customer = Mage::getModel('customer/attribute')->loadByCode('customer', 'source');
$forms= array('customer_account_edit', 'customer_account_create', 'adminhtml_customer', 'checkout_register');
$customer->setData('used_in_forms', $forms);
$customer->save();

$customer = Mage::getModel('customer/attribute')->loadByCode('customer', 'practitioner_referrer');
$forms= array('customer_account_edit', 'customer_account_create', 'adminhtml_customer', 'checkout_register');
$customer->setData('used_in_forms', $forms);
$customer->save();

そのファイルには、Customer属性だけでなく、Quoteテーブルの対応する列も作成されます。ここで、入力された値は、チェックアウトプロセス中に保存されます。

フィールドセットには、データを顧客から見積もりに、またはその逆に変換するためのルールを含める必要があります。したがって、config.xmlは次のようになります。

<?xml version="1.0"?>
<!--
/**
 * @category   Symphony
 * @package    Symphony_Khaos
 * @author     ModuleCreator
 * @license    http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
 */
 -->
<config>
    <modules>
        <Symphony_Khaos>
            <version>0.1.13</version>
        </Symphony_Khaos>
    </modules>
    <frontend>
        <routers>
            <khaos>
                <use>standard</use>
                <args>
                    <module>Symphony_Khaos</module>
                    <frontName>khaos</frontName>
                </args>
            </khaos>
        </routers>
        <layout>
            <updates>
                <khaos>
                    <file>khaos.xml</file>
                </khaos>
            </updates>
        </layout>
    </frontend>
    <admin>
        <routers>
            <khaos>
                <use>admin</use>
                <args>
                    <module>Symphony_Khaos</module>
                    <frontName>khaos</frontName>
                </args>
            </khaos>
        </routers>
    </admin>
    <adminhtml>
        <menu>
            <khaos module="khaos">
                <title>Khaos</title>
                <sort_order>71</sort_order>
                <children>
                    <items module="khaos">
                        <title>Manage Items</title>
                        <sort_order>0</sort_order>
                        <action>khaos/adminhtml_khaos</action>
                    </items>
                </children>
            </khaos>
        </menu>
        <acl>
            <resources>
                <all>
                    <title>Allow Everything</title>
                </all>
                <admin>
                    <children>
                        <Symphony_Khaos>
                            <title>Khaos Module</title>
                            <sort_order>10</sort_order>
                        </Symphony_Khaos>
                    </children>
                </admin>
            </resources>
        </acl>
        <layout>
            <updates>
                <khaos>
                    <file>khaos.xml</file>
                </khaos>
            </updates>
        </layout>
    </adminhtml>
    <global>
        <models>
            <khaos>
                <class>Symphony_Khaos_Model</class>
                <resourceModel>khaos_mysql4</resourceModel>
            </khaos>
            <khaos_mysql4>
                <class>Symphony_Khaos_Model_Mysql4</class>
                <entities>
                    <khaos>
                        <table>khaos</table>
                    </khaos>
                </entities>
            </khaos_mysql4>
        </models>
        <resources>
            <khaos_setup>
                <setup>
                    <module>Symphony_Khaos</module>
                    <class>Mage_Customer_Model_Entity_Setup</class>
                </setup>
                <connection>
                    <use>core_setup</use>
                </connection>
            </khaos_setup>
            <khaos_write>
                <connection>
                    <use>core_write</use>
                </connection>
            </khaos_write>
            <khaos_read>
                <connection>
                    <use>core_read</use>
                </connection>
            </khaos_read>
        </resources>
        <blocks>
            <khaos>
                <class>Symphony_Khaos_Block</class>
            </khaos>
        </blocks>
        <helpers>
            <khaos>
                <class>Symphony_Khaos_Helper</class>
            </khaos>
        </helpers>
        <fieldsets>
            <customer_account>
                <source><to_quote>customer_source</to_quote></source>
                <practitioner_referrer><to_quote>customer_practitioner_referrer</to_quote></practitioner_referrer>
            </customer_account>
            <checkout_onepage_quote>
                <customer_source><to_customer>source</to_customer></customer_source>
                <customer_practitioner_referrer><to_customer>practitioner_referrer</to_customer></customer_practitioner_referrer>
            </checkout_onepage_quote>
        </fieldsets>
    </global>
</config>

2つのことに注意してください。

  • <create><update>チェックアウト登録には必要ないため、ディレクティブは削除されました。必要に応じて、追加し直すことができます。
  • を優先して、カスタムセットアップモデルSymphony_Khaos_Model_Entity_Setup が削除されましたMage_Customer_Model_Entity_Setup。顧客設定モデルは、すべてのタスクを実行するのに十分です。カスタムセットアップモデルのファイルは完全に削除される可能性があります。他のタスクで必要な場合は、カスタムモデルを返すことができます。

出来上がり-それだけです!これらの修正により、チェックアウト登録時に2つの追加フィールドが表示されます。そして、注文が送信されると、データは彼のプロファイルに保存されます。

ただし、いくつかの欠点があるアプローチに基づいているため、実装は最適なものではありません。このアプローチでは、Quoteテーブルにデータを保存する必要がありますが、これらのデータエントリはQuoteモデルとは関係ありません。彼らはそれを輸送手段として利用しているだけです。また、将来的に新しい属性を追加するには、多くの作業を行う必要があります。SQLファイル、構成、およびテンプレートに変更を加える必要があります。

正しいアプローチは、より抽象的な実装を構築することです。ソリューションは、属性データをEAVまたはカスタムテーブルに保存し、必要に応じて、監視されたイベントを介してそれらをCustomer/Quoteモデルに追加する必要があります。テンプレートには、属性の一般的なリストが表示されている必要があります。おそらく、特別な設計が必要なもののための特別なレンダリングモデルが含まれています。

しかし、たった2つの属性については、あなたのアプローチは問題ありません。

Magentoでさらに作業して頑張ってください:)

于 2012-11-21T04:23:22.523 に答える
0

私はあなたが古い記事を参照したと思うので、属性の設定が間違っていると作成されます。

$installer->addAttribute('customer', 'practitioner_referrer', array(  
   'type' => 'int',  
   'input' => 'select',  
   'label' => 'Referer Name',
   'global' => 1,
   'visible' => 1,
   'required' => 0,
   'user_defined' => 1,
   'default' => '0',
   'visible_on_front' => 1  
));

これを試して、結果を教えてください。

于 2012-11-20T22:15:15.590 に答える