2つのフィールドがあります(field_A、field_Bを検討してください)。誰もが、IPアドレスに基づいて、次の2つのフィールドの1つだけを見るはずです。
どうすればこれを達成できますか?
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は国コードを返します。このアプローチはあなたに解決策を与えると思います。
最初にユーザー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']);
}
}
}