Как при заполнении формы редактировать скопировать данные из одного поля в другое?

Главные вкладки

Аватар пользователя Dino127 Dino127 24 июня 2014 в 10:20

Создан материал location. При редактировании выводятся 2 поля: Getlocation Fields с виджетом Геокодер ( удобная карта, маркер ставишь и автоматически локация в виде latitude|longitude ) и Google Map с ее виждетом Мар. Менее удобная. Ну устал я дважды искать (сейчас просто копирую копипейстом)пару latitude|longitude из геокодера в гугл мап. Надо: чтобы когда определелись координаты в Геокодере, их значения были записаны в поля latitude|longitude Google Map. Пусть не динамически, пусть по нажатию сабмита, я б вообще этот гугл мап скрыл, бестолковый он. Но на нем завязана общая карта ( делал не я), убрать не могу. И гетлокейшн нужен...

Комментарии

Аватар пользователя Dino127 Dino127 30 июня 2014 в 13:54

ух ты... скорее всего можно. А как этот код к форме прикрепить? и как инициировать выполнение? опять же... поля формы: наименования для JavaScript... может где почитать можно ? об этом всем...

Аватар пользователя Dirst Dirst 30 июня 2014 в 14:30

Прикрепить можно разными способами, можно написать javascript в основном js фале вашей темы, можно подключить через свойство #attached прямо к форме, так будет даже правильнее. Подключить можно сделав альтер этой формы.
http://drupal.stackexchange.com/questions/70015/adding-css-and-js-to-for...
https://api.drupal.org/api/drupal/modules%21system%21system.api.php/func...

Аватар пользователя Dirst Dirst 30 июня 2014 в 14:32

Про javascript, jQuery надо использовать, как получить значения поля из формы и вставить это значение в другое поле думаю в гугле будет не сложно найти.
Сам скрипт стрелять по $(document).ready()

Аватар пользователя Dino127 Dino127 30 июня 2014 в 23:09

спасибо огромное! и хотя многие вещи придется разбирать экспериментируя - благодарю Вас. Возникнут конкретные вопросы - буду с 3-его числа еще спрашивать, если разрешите )

Аватар пользователя Dino127 Dino127 3 июля 2014 в 21:56

Похоже, что hook_node_presave, hook_node_submit - наиболее подходящие для этого... хм... но есть вопросы:
если я задействую hook_node_presave, то как мне доступиться к полю ноды при создании нового материала? там еще нида нет, сослаться мне не на что... к примеру при альтере формы я свободно доступаюсь к полю по
$form['field_getlocation02'][und][0]['latitude'], но в hook_node_presave это не сработает, что-то типа $node->content['field_getlocation02'][und][0]['latitude'] не работает... Как получить значение из поля getlocation02 ?
по hook_node_submit должно быть проще, но тот же вопрос программного доступа к значению поля...
блин... неужели field_view_field задействовать? очень не уверен, что сможет прочитать, хотя...

Аватар пользователя Dino127 Dino127 5 июля 2014 в 13:37

подскажите плиз, решаю проблему с помощью hook_node_submit . Но как-то подозрительно отрабатывает код в хуке... А именно:
if (!empty($form_state['values']['field_getlocation01'])) {

$form_state['values']['field_map']['und'][0]['lat'] = '28.103469';
$form_state['values']['field_map']['und'][0]['lon'] = '-16.557764';
drupal_set_message("hello map

".print_r($form_state['values']['field_map']['und'][0]['lat'], true));
drupal_set_message("hello map

".print_r($form_state['values']['field_map']['und'][0]['lon'], true));
}
так вот при сохранении ноды, все работает и значения полей field_map меняются на прописанные, но сама карта - ... упс ... без изменений. Такое впечатление, что новые данные не пишутся в базу, а карта берет данные именно оттуда... что за ерунда... И вроде же hook_node_submit отрабатывает ДО записи в базу, по идее должен работать, ан нет... угробил массу времени - не понимаю...

Аватар пользователя drupby drupby 5 июля 2014 в 13:38

"Dino127" wrote:
Такое впечатление, что новые данные не пишутся в базу

в базе данных проверяйте значения полей

Аватар пользователя Dino127 Dino127 5 июля 2014 в 14:09

drupby wrote:
"Dino127" wrote:
Такое впечатление, что новые данные не пишутся в базу

в базе данных проверяйте значения полей

так и проверил... в базу данных пишутся дефолтные значения для гугл мап - поэтому она тупо на лондон и показывает. Если просто руками (копи пейст) скопировать данные на странице редактирования\добавления - ВСЕ ПИШЕТСЯ нормально и все хорошо отображается... блин, что за черт...
причем по

$values['field_map']['und'][0]['lat'] = "значение"

это значение принимается правильно и выводится после сохранения формы в месседж
??? но в базу записывается дефолт... фигня какая-то... уже откопал, что node_submit не для полей, для полей: hook_field_attach_submit/ Но и он отрабатывает точно также... print_r выводит измененное значение, а в базе другая строка...

Аватар пользователя Dino127 Dino127 7 июля 2014 в 14:17

не знаю, почему так отрабатывают функции
hook_node_presave, hook_node_submit...
такое впечатление, что модуль геолокации имеет больший вес. И в базу пишет сразу... ну да ладно, хотел прям из сабмита писать напрямую в базу, но вот не нравится мне эта затея, лишний раз базу дергать.. В итоге все решил следующим образом:
- в альтере формы из своего модуля вызвал
$form['#submit']['0']='module_submit';
и написал функцию
function module_submit(&$form, &$form_state)
где после проверки существований переменных тупо написал
$form_state['values']['field_map']['und'][0]['lat'] = $form_state['values']['field_getlocation01']['und'][0]['latitude'];

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