フロントエンドの顧客からの入力を収集するために、登録フォームに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>
どんな助けでも大歓迎です。
敬具、
ジェームズ