Я знаю, что это старая ветка, но она не обязательно имеет простое решение в 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, чтобы он работал.
В своем решении я использовал этот код двумя способами:
Сначала я создал вариант Panels для шаблона узла (также может быть шаблоном таксономии) для возврата ответа HTTP, а не панели панели. Я использовал этот код в качестве правила выбора, поэтому он возвращает 404, если пользователь не находится в стране, которой разрешено видеть этот конкретный тип узла. Затем я создал вариант Panels, который возвращал страницу узла для всех, кто прошел квалификацию на основании своего местоположения.
Во-вторых, я создал вариант Panels для типа узла (в данном случае Product) и использовал тот же PHP-код, чтобы скрыть определенные элементы на странице для тех пользователей, которым не разрешили их видеть из-за их местоположения. В этом случае я скрыл панели «Цена» и «Добавить в корзину» на странице отображения продукта. Посетители за пределами разрешенных стран видели только информацию о продукте, но не элементы электронной коммерции на странице.
В качестве третьего варианта вы также можете использовать его для отображения / скрытия блоков Drupal, используя тот же код.
Наконец, я создал собственную функцию темы, чтобы я мог показать / скрыть отдельные пункты меню в зависимости от местоположения человека. В этом случае я хотел скрыть пункт меню «Магазин», если вы не находитесь в разрешенных странах. О том, как это сделать, я написал здесь: https://fiveminutelessons.com/learn-drupal-sitebuilding/show-or-hide-menu-item-drupal-7-based-users-location