Я сделал это, только не с полем CCK, а с опцией расположения по умолчанию, которую вы можете добавить к узлам.
Что я сделал, чтобы это работало, так это сначала сохранил местоположение (есть функция APIдля этого), а затем добавьте идентификатор местоположения из сохраненного местоположения.
Пример кода:
Обратите внимание, $center
из внешнего источника, поэтому он не связан с Drupal.Я знаю, что все мои местоположения из Дании в моем примере, так что эта часть просто жестко закодирована.
Когда вы не используете поле CCK, вам не нужно сохранять данные местоположения на узле, вместо этогоВы можете просто сохранить местоположение и создать пару самостоятельно.Это быстрое решение, вместо использования формы узла, как предложено.Для сложных узлов это может быть лучшим выбором, но когда все просто, это делается быстрее.
// Update the location data.
$location = is_array($node->location) ? $node->location : array();
$location += array(
'street' => $center->address->address2,
'city' => $center->address->zipName,
'postal_code' => $center->address->zip,
'country' => 'dk',
'country_name' => 'Denmark',
);
location_save($location);
// Insert location instance, if it's not set yet.
$criteria = array(
':nid' => $node->nid,
':vid' => $node->vid,
':lid' => $location['lid'],
);
if (!db_result(db_query("SELECT COUNT(*) FROM {location_instance} WHERE nid = %d AND vid = %d AND lid = %d;", $criteria))) {
db_query("INSERT INTO {location_instance} (nid, vid, lid) VALUES (%d, %d, %d)", $criteria);
}