2011-10-06 92 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);