これは古いスレッドであることは知っていますが、Drupalで必ずしも簡単な解決策があるとは限りません。これが私がそれをした方法です。このソリューションは元の質問と完全には一致しませんが、PHPコードを拡張してユーザーの場所を各ノードに割り当てられた分類用語と比較することにより、そのシナリオをカバーするように拡張できる方法を説明します。
まず、IP2Countryをインストールします。これにより、ジオロケーションルックアップを実行してIPアドレスを誰かの国に一致させることができます。
次に、このようなPHPコードを使用して、訪問者のIPアドレスが特定の国と一致するかどうかを判断します。この例では、訪問者が米国またはカナダにいる場合はtrueを返し、そうでない場合はfalseを返します。
<?php
$detectedcountry = module_invoke('ip2country','get_country',$_SERVER['REMOTE_ADDR']);
$countries = array(
'US','CA'
);
if(in_array($detectedcountry,$countries)){
return true;
}
else return false;
?>
このコードはさまざまな場所で使用できますが、動作させるにはPHPフィルターモジュールを有効にする必要があります。
私のソリューションでは、このコードを2つの方法で使用しました。
最初に、パネルペインではなくHTTP応答を返すために、ノードテンプレート(分類用語テンプレートの場合もあります)のパネルバリアントを作成しました。このコードを選択ルールとして使用したため、ユーザーがその特定のノードタイプの表示を許可されている国にいない場合は、404が返されます。次に、場所に基づいて資格を取得した人のノードページを返すPanelsバリアントを作成しました。
次に、ノードタイプ(この場合はProduct)のPanelsバリアントを作成し、同じPHPコードを使用して、場所が原因で表示を許可されなかったユーザーのページ上の特定の要素を非表示にしました。この場合、商品表示ページの[価格]ペインと[カートに追加]ペインを非表示にしました。許可された国以外の訪問者は、製品情報のみを表示し、ページのeコマース要素は表示しませんでした。
3番目のオプションとして、同じコードを使用してDrupalブロックを表示/非表示にすることもできます。
最後に、カスタムテーマ関数を作成して、人の場所に応じて個々のメニュー項目を表示/非表示にできるようにしました。この場合、許可された国にいない限り、ショップメニュー項目を非表示にしたいと思います。これを行う方法については、https ://fiveminutelessons.com/learn-drupal-sitebuilding/show-or-hide-menu-item-drupal-7-based-users-locationで詳しく説明しました。