2011-08-30 59 views
0

我需要做的事很简单 - 我有一个CCK字段叫做Number的内容类型(令人惊讶的是,它包含一个十进制数),而且这个内容类型也有一个位置(每个节点总是1个位置)。现在不是典型GMAP标志,我需要在GMAP显示来自CCK场数那些数字,像这样:如何在Drupal上创建GMap标记管理器?

http://cl.ly/2Y3T3J2B2X1M2w2d0u2n

任何想法,该怎么办呢?我简要介绍了GMap模块中包含的标记管理器,我可以创建自己的,但唯一不知道的是如何将节点数据(CCK字段内容)传递到标记管理器。

任何帮助将不胜感激。

回答

0

可能你应该动态地创建标记imageMagick的帮助,并将其附加到节点?

+1

但我怎么在GMAP将这些图像(标记)? – petiar

0

虽然在gmap模块中可能有一个简单的解决方案(我想这就是你所指的),但我使用的解决方案面临类似的问题,是从Drupal(7)获得字段值, (经度和纬度),然后使用Google Googles JavaScript API放置自定义标记。

编辑位置和gmap模块有点太耗时。

自定义标记可以通过谷歌的API的addMarker功能被添加:http://code.google.com/apis/maps/documentation/javascript/overlays.html#ComplexIcons

示例代码如下所示:

<?php 
    drupal_add_js('http://maps.googleapis.com/maps/api/js?sensor=false'); 

    $locationID = $node->field_mylocationField_location['und'][0]['lid'] ; 
    $theLocation = location_load_location($locationID); 


    drupal_add_js('jQuery(document).ready(function(){     
       initialize(); 
       });', 'inline'); 

    ?> 

    <script type="text/javascript"> 
function initialize() { 
var latlng = new google.maps.LatLng(<?php print($theLocation['latitude']) ?>, <?php print($theLocation['longitude'])?>); 
var myOptions = { 
    zoom: 12, 
    center: latlng, 
    mapTypeId: google.maps.MapTypeId.ROADMAP 
}; 
var map = new google.maps.Map(document.getElementById("map_canvas"), 
    myOptions); 

} 

</script> 
+0

这是否意味着您不使用GMap模块显示gmap,但是您只需将此代码放入.tpl文件中,包含gmap API并调用相应的方法,对不对? – petiar

+0

是的,我避开了GMap模块,并使用了一个单独的page.tpl文件。 – naomgabo

1

在下面的例子中,我假设你的号码去100,101,110,200.这个简单的示例序列使我可以说明解决方案的所有方面。

您可以利用GMap支持sequences of custom markers的事实。

你可以因此创建一个自定义标记文件夹,该文件夹中,创建一个.ini文件看起来是这样的:

; Defaults 
[defaults] 
; Note: An empty shadow property will break IE. 
; Leave it commented out if you aren't supplying an image. 
;shadow = "" 
anchorX = 16 
anchorY = 51 
infoX = 24 
infoY = 4 

; Marker sets 
[numbermarkers] 
name = "Number markers" 
sequence = "100.png,101.png,110.png,200.png" 

; Files 

然后创建相关的PNG文件(可以使用其他类型的图像)的100.png,101.png等按GMap设置页面上的重新生成按钮使其重新读取ini文件,以便显示新的标记类型。

在您的GMap设置中,选择您的标记类型为“数字标记”(或您在ini文件中使用的任何名称)。

的标记将现在为了应用到你的电话号码类型,因此请确保您排序的数字(例如在视图设置,如果您使用的是视图)由你提到的十进制数场。

由于您的节点以数字顺序添加到地图中,并且标记顺序中的图像也按数字顺序排列,所以您应该会发现每个标记都有正确的标记!

更新在未来新的Numbers

如果你要增加号码105,例如,你需要:

  1. 创建关联的PNG
  2. 更新ini文件 - 向sequence行添加105.png,以数字顺序保留条目(即在101.png和110.png之间添加105.png),
  3. 在GMap设置页面上按重新生成按钮使其重新读取ini文件。
  4. 您可能还需要清除标准的Drupal缓存(drush cc all是你的朋友)。

你可能会遇到

在我遇到的问题,标记序列在GMAP中的错误,说明herehere。由于这个bug,只有序列中的一个项目被使用。

测试此问题的简单方法是使用GMap的内置“星期”标记类型,并检查它们是否都显示为“Sun”!

我工作围绕这在使用此代码创建一个自定义模块:

function mymodule_gmap($op, &$map) 
{ 
    if ($op == 'pre_theme_map') { 
     if (($map != null) && (array_key_exists('markers', $map))) 
     { 
      for ($count = 0; $count < sizeof($map['markers']); $count++) { 
       $map['markers'][$count]['offset'] = strval($count); 
      } 
     } 
    } 
} 

此手动设置“偏移”字段,以确保它是正确的。

您可能可以修改此代码以使添加新数字的过程更简单,但我不确定 - 我会让您进行调查!

标记文件夹

我建议您在自己的模块创建自定义的标记,而不是将它们放入GMAP的目录,将其添加到GMAP使升级困难。

更多关于如何做到这一点,请参阅: