Веб-форма 6x 3.11 - пользовательский код для определения значения поля веб-формы


Я намерен передать заранее определенный идентификатор узла в веб-форму через строку запроса URL следующим образом:

www.mysite.com/forms/my-form?nid=43

В веб-форме одно из значений поля должно быть вычислено путем получения заголовка узла на основе значения nid. Я хочу использовать текстовое поле, чтобы оно могло быть одним из значений, представленных в электронном письме. Можно ли этого достичь?...потому что из того, что я вижу, поле "значение по умолчанию" допускает только несколько токенов и никакого пользовательского кода. Кроме того, я не хочу проходить в заголовке узла непосредственно в строке запроса по 2 причинам:

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

Я надеюсь, что какой-нибудь гуру друпала сможет прийти мне на помощь! заранее спасибо!

 3
Author: kiamlaluno, 2011-07-24

2 answers

У нас была точно такая же проблема, когда мы разрабатывали пользовательскую онлайн-форму заявления о приеме на работу, и мы хотели передать сведения о работе в соответствующую веб-форму. Как мы решили эту проблему:

  • Созданный узел веб-формы (заявление о приеме на работу)
  • Создал ссылки на узел веб-формы выше в виде /подать заявку онлайн?n=17
  • Созданный пользовательский node-856.tpl.php (856 оказался узлом веб-формы "Подать заявку онлайн"), чтобы
    • сначала проверьте nid как действительный работа
    • подтвердите, что задание опубликовано
    • подтвердите, что задание не было закрыто
    • отформатируйте дополнительные поля в веб-форме, такие как заголовок, должность и т. Д. и т. Д.
    • остановите любое изменение URL-адреса
  • Создал пользовательский крючок проверки веб-формы, чтобы гарантировать, что когда-либо разрешалось отправлять только опубликованные узлы типа "задание" (чтобы остановить любое изменение формы)

Пример кода для крючка проверки:

/**
 *  Implementation of hook_form_alter()
 *  This function is used to add an extra validation function to the apply online webform
 */
function site_profile_form_webform_client_form_856_alter(&$form, &$form_state)  {
  $form['#validate'][] = 'site_profile_validate';
}

/*
 *  Implementation of hook_validate()
 *  Doesn't exactly validate the webform as that's done in another validation function
 *  This takes the nid from the job_url field and turns it into a url.
 */
function site_profile_validate($form, &$form_state) {
  global $base_url;

  $nid = $form_state['values']['submitted']['job_url'];
  $node = node_load($nid);
  $job_url = $base_url . url('node/' . $nid);
  $form_state['values']['submitted']['job_url'] = $job_url;

  //need this to stop the form losing the nid argument in the url
  if (empty($form_state['values']['submitted']['cv']['_fid']) || empty($form_state['values']['submitted']['cover_letter']['_fid']) || empty($form_state['values']['submitted']['completed_application_form']['_fid'])) {
    drupal_goto('apply-online', array('n' => $nid));
  }
}

Пример кода для node-856.tpl.php :

  // job's apply online node ID = 856, this template was made to theme this
  // particular page

  $job_nid = $_GET['n'];
  if (!is_numeric($job_nid)) {
   drupal_access_denied();
   exit;
  }
  $job_node = node_load($job_nid);
  if ($job_node->type != 'job') {
    drupal_access_denied();
    exit;
  }
<div id="node-<?php print $node->nid; ?>" class="node<?php if (!$status) { print ' node-unpublished'; } ?>">

  <h4><?php print t('Job Title'); ?></h4>
  <p><?php print $job_node->title; ?></p>
  <h4><?php print t('Vacancy Number'); ?></h4>
  <p><?php print $job_node->field_number[0]['value']; ?></p>
  <h4><?php print t('Closing Date'); ?></h4>
  <p><?php print $closing_date; ?></p>
  <h4><?php print t('Job Summary'); ?></h4>
  <p><?php print $job_node->teaser; ?></p>

Надеюсь, это поможет

 3
Author: wiifm, 2011-07-25 00:07:57

Вот краткое руководство, которое я написал о том, как запустить пользовательский код с помощью Webform. В нем подробно описывается написание пользовательского модуля, копирование шаблона веб-формы в соответствии с идентификатором узла и добавление пользовательского javascript/jquery для обработки форм.

Http://docs .quantact.com/drupal-webform-custom-php-code

 1
Author: Tim Doyle, 2011-09-23 17:08:54