🦄 2024 独立开发者训练营,一起创业!(早鸟优惠在1天后结束)查看介绍 / 立即报名 →

Drupal + OpenLayers 用地图显示内容

给网站上的内容添加一个位置字段,然后用地图显示这些带位置字段的内容。如果用 Drupal 做这件事,安装 Genfiled 模块,为内容添加收集位置信息的字段,再安装 Openlayes 模块,配合 Views 模块用地图来显示内容。

有朋友想做一个健康医疗类的网站,我觉得想法非常好,如果做好也会非常有用。像 Zocdochealthgrades,网站可以帮助别人找到合适的医生,用户可以根据位置来搜索医生,同时可以用地图的显示展示出搜索结果。

Drupal +  Openlayers 用地图显示内容

自定义用户档案

我们可以为 Drupal 网站上的用户添加字段来收集你想要的信息,不过默认情况下你不能为不同的用户角色添加不同的字段,也就是你为用户添加的字段所有用户都可以看到, 解决这个问题,可以安装 profile2 ( 7.x-1.3 )模块,它可以让我们创建不同的用户档案,这些用户档案有点像是内容类型,不同的用户档案可以添加不同的字段,然后你可以通过 Drupal 的权限管理系统,控制什么样的用户可以添加或者添加什么样的用户档案。

在我们的健康医疗网站里,可能有医生和普通用户,我们可以为医生创建一种用户档案,里面可以添加比如医生的简介,毕业的学校,从业的时间,所属的医院,所在的位置等等。对于普通用户,有些字段是不需要的。

收集位置信息

安装 geofield ( 7.x-1.1 )模块,然后可以为内容添加收集位置信息的字段,收集位置信息的方式有几种,如果这时你已经安装了 openlayers,可以使用 openlayers 地图来收集位置信息( 地图的行为里需要勾选 Geofield ),也就是用户可以直接点击在地图上的位置来确定自己的位置。不管用什么方式,字段所存储的数据就是一个经纬度。

我们可以为使用 profile2 模块创建的医生档案添加一个收集位置信息的字段。

视图配置

在地图上显示内容

安装 openlayers 模块 ( 7.x-2.0-beta3 ),这个模块可以使用 bing,google 地图来显示带有位置字段的内容。要用到 views 视图模块,首先我们要用视图创建一个 openlayers 数据覆盖层,就是找到你想要在地图上显示的内容,内容必须带有位置字段,也就是字段里存储了经纬度信息。

创建数据覆盖层类型的视图,跟创建普通的视图一样,可以参考宁皓网的《 Drupal 7 字段 视图 关系 》这个课程,要注意的是视图的显示必须是 openlayers data overlay 。视图添加的字段里需要有位置字段,然后要设置一下哪个字段是位置字段,哪些字段要作为点击地图标记弹出的窗口里的内容。比如在弹窗里可以显示医生的头像还有名称等等。

创建好要在地图上显示的数据覆盖层以后,我们可以打开 openlayers 去创建一个地图,你可以设置使用 google 地图,bing 地图,或者其它的地图,你可以设置地图标记的样式,是否要使用弹窗信息。然后还要勾选之前使用视图创建的数据覆盖层。

配置好地图以后,我们需要再使用视图去创建一个地图,可以是一个页面,也可以是区块,把视图的格式改成 openlayers map ,再选择要显示的地图,完成!

Drupal OpenLayers

评论

皓哥,你好,请问joomla中怎么修改<jdoc:include type="head"> 输出的类容(就是增加或修改<head></head>部分的css,js链接文件地址和meta标签等),找到了libraries\joomla\document\html\renderer\head.php和libraries\joomla\document\document.php,但是不知道怎么修改,希望你指点一下,万分感谢!

肯定是不能直接修改的,这样你升级以后就会覆盖你的修改,正确的做法是在你的模板中覆盖 <head> 里面的东西。比如在模板的 index.php 文件里加上这行代码:<?php unset($this->_scripts['/media/system/js/mootools-core.js']); ?> ,应该可以去掉 mootools-core.js 。参考:http://stackoverflow.com/questions/10685152/joomla-how-to-remove-unwante...

王皓 无意间看到你的网站 非常喜欢,觉得你讲课风格非常适合我们这些初学者 会继续支持你
不知道有没有关于制作PREZI视频的教程 期待能够看到。

谢谢你 Eric 。不过暂时还没想过要做 Prezi 的视频,我还没用过,不过觉得他很有意思。

谢谢你的回复,皓哥,我试着加<?php unset($this->_scripts['/media/system/js/mootools-core.js']); ?> 到我的index.php中但是mootools-core.js仍然没有去掉,能否帮我解释下下面这个关于script循环,是head.php里的内容,主要搞不懂'<script src="' . $strSrc . '"';这句里面的$strSrc是个数组吗?html输出的js链接地址是怎么和这个函数想关联,在哪可以修改这个函数的值了?
// Generate script file links
foreach ($document->_scripts as $strSrc => $strAttr)
{

好!好!好!这正是我所需要的,谢谢!

微信好友

用微信扫描二维码,
加我好友。

微信公众号

用微信扫描二维码,
订阅宁皓网公众号。

240746680

用 QQ 扫描二维码,
加入宁皓网 QQ 群。

统计

14696
分钟
0
你学会了
0%
完成

社会化网络

关于

微信订阅号

扫描微信二维码关注宁皓网,每天进步一点