2015-10-21 1 views
1

Я хочу изменить адреса электронной почты на основе почтовых кодов, введенных пользователями. Мой код выглядит, как показано ниже:Alter Webform «На адрес электронной почты» на основе некоторых значений с использованием PHP в Drupal 7

function my_webform_tracker_webform_submission_render_alter(&$renderable) { 
    $node_id = (int)$renderable['#node']->nid; 
    if ($node_id == 257) { 
     $postal_code = (int)$renderable['#submission']->data[5][0]; 
     if($postal_code >= 14000 && $postal_code <= 14990) { 
      $renderable['#email'][email] = "[email protected]"; 
      $renderable['#node']->webform['emails'][1]['email'] = "[email protected]"; 
      $renderable['#node']->webform['emails'][2]['email'] = "[email protected]"; 
      //print "<pre>"; print_r($renderable); exit; 
     } 
    } 
} 

Я пробовал много, но электронный идентификатор, кажется, не изменилось.

Пожалуйста, помогите мне разобраться в этом.

+0

Эта строка выглядит подозрительной: $ renderable ['# email'] [email] = "[email protected]"; email не получил кавычек. Возможно, вы хотели написать: $ renderable ['# email'] ['email'] = "[email protected]"; –

+0

hook_webform_submission_render_alter() изменит способ отображения результатов представлений, сделанных с помощью вашей веб-формы в бэк-офисе. Таким образом, это не изменит значение, в лучшем случае вы будете скрывать их с другим значением при просмотре этого экрана. Если это то, что вы пытаетесь сделать, лучше всего начать с активации модуля devel и просто сделать dpm ($ renderable); Итак, у вас будет лучшее представление о том, какие значения в вашей визуализируемой переменной (и даже получили путь к значениям, чтобы вы могли скопировать их в свой код, чтобы их изменить). –

ответ

0

Вы пытаетесь изменить адрес электронной почты после того, как пользователь вводит почтовый индекс на экране? Если вам нужно сделать ajax-вызов в поле почтового индекса (обнаружить изменение), чтобы перезагрузить поле электронной почты вашего веб-формы.

Также я пойду с hook_form_alter на веб-форму (hook_form_ «Webform идентификатор» _alter()), а не крюк вы используете

0

Я понял это, на самом деле я использовал неправильный крюк, чтобы сделать задачу , Правильный должен быть «hook_webform_submission_presave». Поэтому мой код будет выглядеть так:

function my_webform_tracker_webform_submission_presave($node, &$submission) { 
     $postal_code = (int)$renderable['#submission']->data[5][0]; 
     if($postal_code >= 14000 && $postal_code <= 14990) { 
     $node->webform['emails'][1]['email'] = "[email protected]"; 
     $node->webform['emails'][2]['email'] = "[email protected]";  
     } 
    } 

Спасибо всем за помощь !!

Смежные вопросы