Drupal отображает только определенный контент в зависимости от местоположения
Мне нужно иметь возможность отображать только определенный контент / узлы в зависимости от того, где находится пользователь в мире. Например, если пользователь из США, он должен увидеть другие результаты, чем кто-либо из Европы.
В идеале я бы мог пометить каждый узел областью, в которой он должен отображаться, а затем, когда отображается содержимое, он фильтруется по этим тегам.
Я также собираюсь использовать различные "скроллеры" для отображения контента, и я хотел бы, чтобы они также имели разный контент в зависимости от местоположения.
Как бы я лучше всего достичь этого?
2 ответа
Используйте Views - и классные модули, такие как:
- Используйте такие модули, как smart_ip http://drupal.org/project/smart_ip & Ip Geolocation http://drupal.org/project/ip_geoloc
- Прочитайте информацию на этих страницах модуля, они помогут вам встать на правильный путь
В основном вы хотите сначала получить местоположение пользователя, это будет сохранено в сеансе. если у вас есть это, вы можете ссылаться на него в любое время.
Я знаю, что это старая ветка, но она не обязательно имеет простое решение в 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