2011-08-30 61 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使升級困難。

更多關於如何做到這一點,請參閱: