web-dev-qa-db-ja.com

Webフォームブロックの送信後、同じWebページでそのWebフォームブロックをお礼のメッセージに置き換える方法は?

ウェブフォームブロックを作成し、右側のサイドバーのページに割り当てました。そのブロックが正常に送信された後、Webフォームに送信された値を記載したお礼メッセージを、同じページの以前のブロックのどこに表示したいですか。

webformform settingsno-redirectオプションを指定しました。

ブロック設定表示モードフォームのみとして指定されたWebフォームブロックの==でも。

しかし、同じページでwebformが正常に送信されたことを示すメッセージにwebformブロックをどのように置き換えればよいでしょうか? Drupalこれを達成する方法があります。設定を見逃していませんか ??

どんな助けでも大歓迎です。事前に感謝します。

2
Ram

ウェブフォームをブロックとして設定している場合は、[管理]> [構造]> [ブロック]に移動できます。ウェブフォームブロックを探します。 Webform: 'name of webform node'のような名前にする必要があります。右側の設定リンクをクリックします。ブロックの編集フォームがロードされたら、セクション確認メッセージを探します。オプションを選択します同じページのブロックに確認ページを表示します(リダイレクトなし)。これで、ブロックからフォームを送信すると、フォームがリダイレクトされ、リロード時に確認メッセージが表示されます。

Webフォームの設定でメッセージの入力が必要になる場合があります。比較できるようにブロック編集ページの画像を添付しました。 enter image description here

1
Jorge Calderon

これは一種のハックですが、Webformsでネイティブに行う方法を理解できませんでした。この実装では、カスタムモジュールを使用します。

//カスタムモジュールブロックを登録します

function my_module_block_info() {
  $blocks = array();
  $blocks['my_form'] = array(
    'info' => t('My Form Title'),
    'cache' => DRUPAL_NO_CACHE,
  );  
  return $blocks;
}

//ブロックのコンテンツを設定します

function download_training_plan_block_view($delta) {
  $block = array();
  switch ($delta) {
    case 'my_form':
      $block['subject'] = '';
      $block['content'] = my_form_details();
      break;
  }
  return $block;
}

//ブロックのテーマを設定します

function my_form_details() {
  return theme('my_form_details');
}

//カスタムテンプレートファイルを使用します。

function download_training_plan_theme() {
  $template_path = drupal_get_path('module', 'my_module_template_file') . '/templates';
  $theme_hooks = array(   
    'my_form_details' => array(
      'path' => $template_path,
      'template' => 'Altered form',
      'variables' => array('title' => NULL),
    ),
  );
  return $theme_hooks;
}

// webformを使用する場合、フォームを変更してコールバック関数を含めます

function my_module_form_alter(&$form, &$form_state, $form_id) {
  if ($form['#node']->title == 'Obstacle Teaser 2018 Data Capture'){
    $form['actions']['submit'] = array(
      '#type' => 'submit',
      '#ajax' => array(
        'callback' => 'my_form_callback',
        'wrapper' => str_replace('_', '-', $form['#form_id']),
      ),
      '#value' => t('Submit'),
    );
  }
}

//送信された状態を記憶して非表示のコンテンツを表示するようにCookieを設定します

function my_form_callback(&$form, &$form_state) {
  if (!form_get_errors() && $form_state['values']['details']['sid']) {    
    // Save cookie.    
    setcookie('is_submitted_cookie', TRUE, REQUEST_TIME + (31556926 * 2), '/');
    $commands = array();
    $commands[] = ajax_command_invoke('#secret_content', 'show'); //show hidden content
    return array('#type' => 'ajax', '#commands' => $commands);
  }
  return $form;
}

//ファイル内:my_module_template_file.tpl.php

        <?php $download_form = module_invoke('webform', 'block_view', 'client-block-999999'); ?> // replace 999999 with nodeID of webform.
        <?php if (!empty($download_form['content'])): ?>
          <?php print render($download_form['content']); ?>
        <?php endif; ?>
<div id="secret_content" style="display:none;"><a href="#">Download content</a></div>
0
John La

Webform AJAX モジュールを有効にして、インストールします。構成するには:

  • Webフォームのフォーム設定に移動します
  • チェックAJAXモード
  • そして、確認画面を表示で確認します
  • また、[リダイレクトの場所]で[リダイレクトなし(現在のページを再読み込み)]を選択してください。
  • 確認メッセージのテキスト領域にテキストを追加します。

Webフォームを送信すると、Webフォームの代わりに確認メッセージが表示されます。

0
Hemangi Gokhale