Drupal отображает только определенный контент в зависимости от местоположения

Мне нужно иметь возможность отображать только определенный контент / узлы в зависимости от того, где находится пользователь в мире. Например, если пользователь из США, он должен увидеть другие результаты, чем кто-либо из Европы.

В идеале я бы мог пометить каждый узел областью, в которой он должен отображаться, а затем, когда отображается содержимое, он фильтруется по этим тегам.

Я также собираюсь использовать различные "скроллеры" для отображения контента, и я хотел бы, чтобы они также имели разный контент в зависимости от местоположения.

Как бы я лучше всего достичь этого?

2 ответа

Решение

Используйте Views - и классные модули, такие как:

  1. Используйте такие модули, как smart_ip http://drupal.org/project/smart_ip & Ip Geolocation http://drupal.org/project/ip_geoloc
  2. Прочитайте информацию на этих страницах модуля, они помогут вам встать на правильный путь

В основном вы хотите сначала получить местоположение пользователя, это будет сохранено в сеансе. если у вас есть это, вы можете ссылаться на него в любое время.

Я знаю, что это старая ветка, но она не обязательно имеет простое решение в 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

Другие вопросы по тегам