我需要能够根据用户在世界中的位置仅显示某些内容/节点。例如,如果用户来自美国,他们应该看到与欧洲人不同的结果。
理想情况下,我可以使用应显示的区域标记每个节点,然后在显示内容时,它会被这些标记过滤。
我也将使用各种内容“滚动条”来显示内容,我希望这些内容也会根据位置提供不同的内容。
我最好如何做到这一点?
答案 0 :(得分:3)
使用视图 - 和酷模块,如:
基本上你想先得到用户的位置,这将存储在会话中。 一旦你有了,你可以随时参考。
答案 1 :(得分:0)
我知道这是一个老线程,但它不一定在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 Variant(也可以是一个Taxonomy Term模板)来返回HTTP响应而不是Panel面板。我使用此代码作为选择规则,因此如果用户不在允许查看特定节点类型的国家/地区,则会返回404。然后,我创建了Panels变体,为任何根据其位置限定的人返回节点页面。
其次,我为节点类型(在本例中为Product)创建了一个Panels变体,并使用相同的PHP代码隐藏页面上的某些元素,以供那些因其位置而不允许查看它们的用户。在这种情况下,我在产品显示页面上隐藏了价格和添加到购物车窗格。允许国家/地区以外的访问者只能看到产品信息,而不会看到页面上的电子商务元素。
作为第三个选项,您还可以使用它来显示/隐藏使用相同代码的Drupal块。
最后,我创建了一个自定义主题功能,以便根据个人的位置显示/隐藏单个菜单项。在这种情况下,我想隐藏Shop菜单项,除非您在允许的国家/地区。我在这里写了更详细的文章:https://fiveminutelessons.com/learn-drupal-sitebuilding/show-or-hide-menu-item-drupal-7-based-users-location