我需要能够只显示某些内容/节点的基础上,一个用户在世界上的位置。例如,如果用户来自美国,他们应该看到与来自欧洲的人不同的结果。
理想情况下,我可以在每个节点上标记它应该显示的区域,然后在显示内容时,通过这些标记对其进行过滤。
我还将使用不同的内容“滚动条”来显示内容,我希望这些滚动条也能根据位置有不同的内容。
我该如何最好地实现这一点呢?
发布于 2012-02-21 00:22:45
使用视图和很酷的模块,比如:
基本上,您希望首先获取用户的位置,该位置将存储在会话中。一旦你有了它,你就可以随时引用它。
发布于 2017-07-06 03:07:15
我知道这是一个古老的线程,但它在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过滤器模块才能使其工作。
在我的解决方案中,我以两种方式使用此代码:
首先,我为Node模板(也可以是Taxonomy术语模板)创建了一个Panels变体,以返回HTTP响应而不是Panel Pane。我将此代码用作选择规则,因此如果用户所在的国家/地区不允许查看该特定节点类型,则它将返回404。然后,我创建了面板变体,为任何符合条件的人返回节点页面,这些页面基于他们的位置。
其次,我为节点类型(在本例中为Product)创建了一个Panel变体,并使用相同的PHP代码隐藏页面上的某些元素,以供因位置原因而无法查看的用户查看。在本例中,我隐藏了产品显示页面上的Price和Add to Cart窗格。被允许的国家以外的访问者只能看到产品信息,而不是页面上的电子商务元素。
作为第三种选择,您还可以使用相同的代码来显示/隐藏Drupal块。
最后,我创建了一个自定义主题函数,这样我就可以根据人的位置显示/隐藏单个菜单项。在这种情况下,我想隐藏Shop菜单项,除非您在允许的国家/地区。我在这里详细介绍了如何做到这一点:https://fiveminutelessons.com/learn-drupal-sitebuilding/show-or-hide-menu-item-drupal-7-based-users-location
https://stackoverflow.com/questions/9359787
复制