注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

John's Blog

天空,有梦就可以飞翔!

 
 
 

日志

 
 
关于我

刚走出校园的毕业生,就读计算机网络专业,对网站建设有一定的基础。开始探求Drupal已有一段时间,对Drupal的发展很是看好。现就职于深圳慧衡科技有限公司(intematrix.cn),它是一家专门服务于中国及海外中小企业的网络营销分析和优化服务提供商。 QQ交流群:44581272

网易考拉推荐

Drupal:如何使用cck和gmap模块相配合  

2009-07-24 15:05:19|  分类: drupal学习 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
这次要和大家共同学习的内容是:如何使用cckgmap模块相配合,为node输出一个地图字段。
 
这两个模块的安装我就不说了,cck也算是建站必备模块之一了,而gmap大家可以参照我们网站的相关教程进行安装设置,所以我们默认的环境是已经有了一个装好cck模块的网站,并且成功设定了一个名为gmap的输入方式(Input format)。所以,让我们直接从给page添加一个gmap字段开始。
 
流程如下:
 
1 使用cckpage添加一个text字段,比如我们添加一个名为gmap的字段,如下图
 
<>1 添加一个新的text字段
 
这里记得要选textarea作为输入方式,然后点击save进入字段的进一步设定页面。
 
2 设定的时候要注意的只有一点,将text processing选项选成 filtered text,如下图
 
<>2 选择filtered text作为文本的处理方式
 
3 点击save之后,再次进入这个字段的设定页面(点击Configure),这次的目标是Default value。点击展开后,我们把input format 选为 gmap
 
其实以上过程可以概括为一句话:所谓的gmap字段,其实就是一个input formatgmaptextarea字段!
 
那么在这个字段中输入什么内容才能让它变成一副地图呢?
 
当安装了gmap模块之后,admin菜单中会多出这么一项:“Build a GMap macro”。我们进去之后会发现,随着我们输入不同的地址和参数去影响表单顶部的地图,表单底部的Macro text的内容会随之变化。而反过来,这个Macro text的内容也就决定了输出的地图是个什么样子。例如:
 
[gmap markers=small red::40.03246137517224,0.019698143005371094 |zoom=14 |center=40.03510650774659,0.018367767333984375 |width=400px |height=300px |control=Large |type=Map]
 
这是一个简单的Macro text,参照http://www.drupalbar.com/node/86 的内容可以很容易知道这段文本中各个参数的作用。这里简单的说一下:
 
markers:顾名思义,就是用参数定义了地图上的标记。具体的定义方式是:
 
markers=标记类型::标记1经度,标记1纬度:标记1上显示的文本信息+标记2经度,标记2纬度:标记2上显示的文本信息……+标记n经度,标记n纬度:标记n上显示的文本信息
 
zoom:就是地图展开的时候默认的缩放等级。
 
center:后面跟着的经纬度就是地图展开的时候默认的中心点经纬度。
 
widthheight:不用说了,地图的宽度和高度。
 
control:地图的操控部件的类型,就是那个包含了缩放等级和比例尺的东东。
 
type:地图的显示类型,比如卫星图,地理图之类的。
 
这几个参数之间用“|”隔开。
 
于是,我们联系前面几个gmap的教程内容,再配合cck,就可以做到如下功能。
 
创建一个名为user addresscotent type,含有nameaddressgmap三个字段,而第三个gmap字段我们用jquery把它隐藏起来,并不让用户填写。如下图:
<>带有3个自定义字段的user address
 
 
<>4 用户填写表单的页面 gmap字段已经被隐藏了起来
 
这样当用户创建一个user address的时候,他将输入名字和地址,我们就可以通过这个地址按照前几讲的方法获取经纬度,然后用经纬度和用户的名字来写一个Macro text,最后hook到这个表单的提交过程中,将这个Macro text赋值给gmap字段,那么当用户填写表单结束之后,就会发现一副标出了他的名字和地址的地图已经添加在这个node之中了。
 
这里贴一段简单的代码仅供参考:
 
使用form_alter在表单的提交函数中增加函数user_address_submit(&$form,&$form_state)
 
function user_address_form_user_address_node_form_alter(&$form,$form_state) {
        
    //隐藏gmap字段
         drupal_add_js("
          $(document).ready(function() {
             $('#edit-field-map-0-value-wrapper').hide();
          });
         ","inline");
    //指定sunmit函数
         $form['#submit'][] = 'user_address_submit';
}
 
然后按照如下方式定义函数
 
function user_address_submit(&$form,&$form_state) {
 
    $name = $form_state['values']['field_name']['0']['value'];//获得name的值
    $address = $form_state['values']['field_address']['0']['value'];//获得address的值
        
         $url =urlencode($address);//address转化为适合url的格式
         $url =
'http://maps.google.com/maps/geo?q='.$url.'&output=csv&key=abcdefg';//拼凑一个用于访问取得经纬度的地址。
 
         $point=drupal_http_request($url);//访问google,取得经纬度
         $str_array=explode(',',$point->data);//分析google的返回值
    $point_latitude = $str_array[2]; //在返回值中取出经度
$point_longitude = $str_array[3];//在返回值中取出纬度
 
//拼凑gmap macro并将它赋值给field_字段
$form_state['values']['field_map']['0']['value']='[gmap markers=blue::'.$point_latitude.','.$point_longitude.':<ul><li>'.name.'</li><li>'.$address.'</li></ul>|zoom=12 |center='.$point_latitude.','.$point_longitude.' |width=300px |height=200px |control=Large |type=Map]';
 
}
 
这样用户在每次建立或者修改user address内容的时候,就可以自动的根据用户填写的nameaddress内容自动生成一个带有标记的地图了。
效果如下图:
 
<>5 带有gmapnode
 
Notice:标记上的文本写在gmap macro text中的时候是以html代码的形式出现的,这让你可以很容易的直接改写文本内容的结构,这里要注意的是“|”和“:”都会导致文本内容的结束,所以要对其进行转义
  评论这张
 
阅读(480)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016