基本的にアドレスと請求の両方に同じフォームパーシャルを使用し、JavaScriptを使用してフォームを非表示にするCraft
Commerceテンプレートで提供されるものと同様のアドレスモデルを使用したため、HTML必須属性は使用できません。
設定ファイルに
‘shipping.phone’を必要とし、デフォルトの必須フィールドが動作するのと同じ方法でエラーを返す方法を追加する簡単な方法はありますか?
<div class="inputGroup{% if model and model.hasErrors('phone') %} error{% endif%}">
Contact details
<div class="inputWrap"> <input type="text" id="{{ modelName }}-phone" class="u-full-width" name="{{ modelName }}[phone]" value="{{ model ? model.phone : '' }}"> {% if model and model.hasErrors('phone') %}{{ model.getError('phone') }}{% else %}Required{% endif %} </div>
In case we need to contact you about important details regarding your order. </div>
ベストアンサー
Commerceでアドレス検証を行う方法は、プラグインを使用して
onBeforeSaveAddress
イベントをリスニングすることです。
リスナーを次のように設定します。
craft()->on('commerce_addresses.onBeforeSaveAddress',
[
craft()->businessLogic_logic,
'onBeforeSaveAddressHandler'
]
);
次に、いくつかの検証を行う関数の例を示します。
public function onBeforeSaveAddressHandler($event){
$address = $event->params['address'];
if(!$address->firstName){
$address->addError('firstName','First name must not be empty');
$event->performAction = false;
}
if(!$address->lastName){
$address->addError('lastName','Last name must not be empty');
$event->performAction = false;
}
if(!$address->phone){
$address->addError('phone','Phone number must not be empty');
$event->performAction = false;
}
if(!$address->address1){
$address->addError('address1','Street Address line 1 must not be empty');
$event->performAction = false;
}
if(!$address->city){
$address->addError('city','Suburb must not be empty');
$event->performAction = false;
}
if(!$address->zipCode){
$address->addError('zipCode','Postcode must not be empty');
$event->performAction = false;
}
if(!$address->countryId){
$address->addError('countryId','Country ID must not be empty');
$event->performAction = false;
}
}