Craft Commerce:JavaScriptなしで住所電話の電話番号を入力する必要があります

基本的にアドレスと請求の両方に同じフォームパーシャルを使用し、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;
    }          
}

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です