2011-10-06 94 views
0

我被困在一個問題上,我已經研究了好幾天沒有運氣,這裏的答案通常都是現貨。以編程方式設置位置數據

我有自定義模塊的代碼,從形式提供的數據添加一個節點:

$edit = array(); 
$edit['uid'] = $user->id; 
$edit['name'] = $user->name; 
$edit['status'] = 1; 
$edit['taxonomy'] = array($term_id); 
$edit['title'] = $Title; 
$edit['body'] = $body; 

等等

,然後保存:

node_invoke_nodeapi($edit, $nType); 
node_validate($edit); 
if ($errors = form_get_errors()) { 
     print_r($errors); 
} 

$node = node_submit($edit); 
node_save($node); 

這一切都完美。但我試圖根據提供的(清理過的)zip字段將位置數據添加到每個節點。

我有gmap和位置模塊安裝和工作。當我使用drupal內容編輯器直接添加壓縮文件時,它一切正常。甚至是gmap的觀點。所以我知道版本和mod都是正確的。

我用這個:

$location = array(
'country' => 'US', 
'postal_code' => $zip, 
); 
$locationID = location_save($location); 

這:

$location['country'] = "US"; 
$location['postal_code'] = $zip; 
$locationID = location_save($location); 

有和沒有國家的元素。 然後在節點數據初始化部分(上文)這樣的:

$edit->locations[0]['lid'] = $locationID; 

if($locationID) $edit['field_location'][0]['lid'] = $locationID; 

if($locationID) $edit['location'][0]['lid'] = $locationID; 

但沒有的工作原理。提交將實際通過,但沒有保存位置數據。並沒有錯誤拋出。

任何幫助,這將不勝感激。

回答

2

我沒有得到這個工作,(萬一有人是有在這個同樣的問題,並絆),首先創建的節點,然後用添加位置數據到節點:

$locations = array(); 
$locations[0]['postal_code'] = $zip; 

$criteria = array(); 
$criteria['nid'] = $node->nid; 
$criteria['vid'] = $node->vid; 
$criteria['genid'] = 'NAME OF NODE TYPE HERE'; 

location_save_locations($locations, $criteria); 

我猜測location_save_locations是正確的做法,而不是location_save。

0

按照你的方法,通過更廣泛的location_save_locations 4行暴露,可以更新與位置:

location_save($locations[$key], TRUE, $criteria); 

的幾個注意事項:

  • location_save返回保存的位置的蓋子如果位置被認爲是「空的」,則爲FALSE。
  • 清理緩存或查詢數據庫(mysql> SELECT * FROM location ORDER BY lid DESC limit 6)以獲取新實體位置的新視圖(即:可以緩存node_load數據)。

另外,如果您正在處理與位置領域的實體,您可以嘗試的東西像清潔劑:

// A) give to the $node field an updated location 
    $node->field_location['und'][0] = $location; 
    // B) Save node with updated location 
    node_save ($node);