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