我需要做的很简单——我有一个内容类型,它有一个名为 Number 的 CCK 字段(令人惊讶的是,它包含一个十进制数),并且这个内容类型也有一个位置(每个节点总是 1 个位置)。现在,我需要在 GMap 上显示 CCK 字段 Number 中的这些数字,而不是典型的 GMap 标记,如下所示:
知道怎么做吗?我简要了解了 GMap 模块中包含的标记管理器,我可能能够创建自己的标记管理器,但我唯一不知道的是如何将节点数据(CCK 字段内容)传递到标记管理器中。
任何帮助都感激不尽。
我需要做的很简单——我有一个内容类型,它有一个名为 Number 的 CCK 字段(令人惊讶的是,它包含一个十进制数),并且这个内容类型也有一个位置(每个节点总是 1 个位置)。现在,我需要在 GMap 上显示 CCK 字段 Number 中的这些数字,而不是典型的 GMap 标记,如下所示:
知道怎么做吗?我简要了解了 GMap 模块中包含的标记管理器,我可能能够创建自己的标记管理器,但我唯一不知道的是如何将节点数据(CCK 字段内容)传递到标记管理器中。
任何帮助都感激不尽。
在以下示例中,我假设您的数字为 100、101、110、200。这个简单的示例序列让我能够说明解决方案的所有方面。
您可以利用 GMap 支持自定义标记序列这一事实。
因此,您可以创建一个自定义标记文件夹,并在该文件夹中创建一个如下所示的 .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
然后为 100.png、101.png 等创建关联的 PNG 文件(您可以使用其他图像类型)。按 GMap 设置页面上的Regenerate按钮使其重新读取 ini 文件,以便您的新标记类型出现。
在您的 GMap 设置中,选择您的标记类型为“数字标记”(或您在 ini 文件中使用的任何名称)。
现在将按照您的数字类型应用标记,因此请确保您按您提到的十进制数字字段对数字进行排序(例如,如果您使用视图,则在视图设置中)。
由于您的节点按数字顺序添加到地图中,并且标记序列中的图像也按数字顺序排列,您应该会发现每个节点都有正确的标记!
将来更新新号码
例如,如果您要添加数字 105,您需要:
sequence
行,以数字顺序保持其中的条目(即在 101.png 和 110.png 之间添加 105.png),drush cc all
是您的朋友)。您可能会遇到的问题
根据我的经验,标记序列在 GMap 中有一个错误,在此处和此处进行了描述。由于此错误,仅使用了序列中的一项。
测试这个问题的一个简单方法是使用 GMap 内置的“星期”标记类型,并检查它们是否都显示为“太阳”!
我通过在以下代码中创建一个自定义模块来解决这个问题:
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 会使升级更加困难。
有关如何执行此操作的更多信息,请参阅:
虽然在 gmap 模块中可能有一个简单的解决方案(我猜这就是您所指的),但我遇到类似问题的解决方案是从 Drupal ( 7 ) 获取字段值(经度和纬度) 然后使用 Googles javascript API 放置自定义标记。
编辑 location 和 gmap 模块有点太耗时了。
可以通过google 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>
可能您应该在 imageMagick 的帮助下动态创建标记并将其附加到节点?