web-dev-qa-db-ja.com

訪問者の国に基づいてフィールドを表示/非表示にする方法は?

2つのフィールドがあります(field_A、field_Bを検討してください)。誰もが、IPアドレスに基づいて、次の2つのフィールドの1つだけを見るはずです。

  • 米国のユーザーがページにアクセスする場合、field_Aのみが表示されます。
  • 他の国では、field_Bが表示されているはずです。

どうすればこれを達成できますか?

5
user50991

Geo Ipを使用してこれを行うことができます。リンクに記載されている指示に従って、Geo Ipをインストールします http://www.beginninglinux.com/home/php/ubuntu-php -5-geo-ip

drupal ip_address() 関数を使用してユーザーのIPアドレスを取得します。

function test() {
  $code = geoip_country_code_by_name($ip);
  if ($code == 'US') {
    //hide  field B
  }
  else {
    //hide field A
  }

}

geoip_country_code_by_nameは国コードを返します。このアプローチはあなたに解決策を与えると思います。

1
Vamsi

最初にユーザーIPによって検出された国に応じてフィールドを表示または非表示にする場合は、ユーザーの国を検出するモジュール( ip2country モジュールなど)を使用する必要があり、IPを検出するJavaScript APIがある場合はそれを使用しますどこでhook_form_alter国を検出し、次のようなフィールドを非表示にします

function yourmoudle_form_alter(&$form,$form_state,$form_id){
 if($form_id=='your_form_id'){
     $ip = $_SERVER['REMOTE_ADDR'];
      $country_code = ip2country_get_country($ip);
    if($country=='US'){
     hide($form['field_b']);
   }
  }
}

代替ソリューション
また、モジュールなしで処理でき、Geo IPを使用できます。@ Vamsiが提案するように、

リンクに記載されている手順に従って、Geo Ipをインストールします http://www.beginninglinux.com/home/php/ubuntu-php -5-geo-ip 使用drupal ip_address() ユーザーのIPアドレスを取得する関数。

geoip_country_code_by_namereturn成功した​​場合は2文字のISO国コードを返し、データベースでアドレスが見つからない場合はFALSEを返します。

function yourmoudle_form_alter(&$form,$form_state,$form_id){
 if($form_id=='your_form_id'){
     $ip = $_SERVER['REMOTE_ADDR'];
      $country_code = geoip_country_code_by_name($ip);
    if($country=='US'){
     hide($form['field_b']);
   }
  }
}
1
Yusef