Установка данных о местоположении программно - PullRequest
0 голосов
/ 06 октября 2011

Я застрял в проблеме, которую я исследовал в течение нескольких дней, но безуспешно, и ответы здесь, как правило, сразу.

У меня есть пользовательский код модуля, который добавляет узел из данных, предоставленных формой:

$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 и location. Когда я добавляю zip напрямую с помощью редактора контента drupal, все работает. Даже просмотров gmap. Так что я знаю, что версии и моды все правильные.

Я использовал это:

$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 ]

2 голосов
/ 09 октября 2011

Я заставил это работать (в случае, если у кого-то возникла та же проблема, и наткнулся на нее), сначала создав узел, а затем добавив данные о местоположении в узел с помощью:

$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 голосов
/ 05 апреля 2017

Следуя вашему подходу, как показано более широким location_save_locations в строке 4, вы можете обновить местоположение с помощью:

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

Несколько заметок:

  • location_save возвращает крышку сохраненного местоположения или FALSE, если местоположение считается «пустым».
  • Очистите кэш или запросите базу данных (mysql> SELECT * FROM location ORDER BY lid DESC limit 6) для нового просмотра нового местоположения объекта (т. Е. Данные узла_загрузки могут быть кэшированы).

В качестве альтернативы, если вы обрабатываете сущность с полем местоположения, вы можете попробовать что-нибудь более чистое, например:

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