Drupal отображает только определенный контент в зависимости от местоположения - PullRequest
3 голосов
/ 20 февраля 2012

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

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

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

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

Ответы [ 2 ]

3 голосов
/ 21 февраля 2012

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

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

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

0 голосов
/ 06 июля 2017

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

...