您在這裡

製作一個地圖搜尋網站

silaslin's 的頭像
silaslin 在 2010-11-23 (二) 18:27 發表

朋友的訓練網站完成了,他又想到要製作一個地圖搜尋網站,有點類似這個 http://church.fhl.net/

我想到的解決方案是:
使用模組: Location, GMap, Views, Editablefields, Viewfield, Import Node

1. 新增[找教會]的內容類型,只要兩個欄位,一個是地址(設定為 EditablefieldsJ(AJAX)),另一個是 Viewfield(顯示地圖)

2. 再新增[教會]的內容類型,使用 Import Node 將資料匯入

3. 新增一個 type 為內容節點的 views, 過濾器和欄位都增加[位置: 距離 / 附近]
過濾器選擇[PHP code for latitude, longitude:]
內容如下:
===========================
$node=node_load(找教會的 Nid);
$ads = $node->field_where[0]['value'];

// Your Google Maps API key
$key = "Your Google Maps API key";

// Desired address
$address = "http://maps.google.com/maps/geo?q=".$ads."&output=xml&key=$key";

// Retrieve the URL contents
$page = file_get_contents($address);

// Parse the returned XML file
$xml = new SimpleXMLElement($page);

// Parse the coordinate string
list($longitude, $latitude, $altitude) = explode(",", $xml->Response->Placemark->Point->coordinates);

return(array(
'latitude' => $latitude,
'longitude' => $longitude
));
========================

樣式:GMap,巨集設定為 [gmap | behavior=+autozoom +notype]

4. 這是一個比較髒的做法,就是在同一個 views 中,新增一個 page,撈出[找教會]內容節點的全文,然後給他一個 mymap 的路徑
將找店家的 viewsfield 強制設定為這個 views 的 default
這樣在設定搜尋範圍,按下 Apply 後,會繼續留在 mymap 這個路徑,有點類似無窮迴圈的做法

不過這個做法,真的不美,還會跑出一個[檢視: ]的字串,不像 node theming 一樣有彈性。
不曉得有沒有大大可以提供更好的做法?

剛剛發現這種作法有個大 bug

Editablefields 需要使用者在輸入後,按 entger 或在其他地方點選滑鼠左鍵,才能儲存欄位。

如果使用者輸入搜尋的地址,沒有按 enter,直接按 views exposed filter 的 Apply 按鈕,Editablefields 在沒有儲存搜尋地址的狀態下,會變成甚麼事都沒發生。

看來得找其他的解決方案了~