Webformでテーブル形式にしたい

カテゴリ コンテンツの作成 コアバージョン 7.38 関連モジュール Webform

Webformはとても便利で、ある部分は標準ノード編集より使いやすい(ユーザーフレンドリー)なところがあり、U/Iの観点からノードを投稿するのではなく、一旦Webformで投稿し、自動的にノードを生成するような使い方もアリです。
Webform4からは、送信内容確認機能も追加され、Conditional(状態判定機能)、複数ページ機能と合わせると相当良いU/Iを作れます。

ただ、残念ながら、生成出力されるタグが<div>中心のため、表示崩れや、日本受けしないなどの理由から採用を躊躇してしまうこともあります。
CSSやテンプレートで頑張れば、それなりに対応できますが、Webform全てに対応するのは時間がかかります。

やはり、和風なテーブル表示形式に対応し、内容確認画面共々テーブル表示することで安定したフォームを作りたいものです。

コメント

ユーザー actbrain の写真

Webformのテーブル化は、下記手法で実現します。

1.hook_form_alter()でsubmission(フォーム)とpreview(内容確認)全体をテーブルでラップする。
2.各フォームを<tr>〜</tr>でラップする。

参考)下記のようなコードになります。

/**
* Implement hook_form_alter() {
*/
function モジュール名_form_alter(&$form, $form_state, $form_id) {
if (strpos($form_id, 'webform_client_form_') === 0) { // Webform client form?
// フォームをテーブル化する。
foreach (array('submitted', 'preview') as $type) {
if (isset($form[$type]) && is_array($form[$type])) {
$form[$type]['#prefix'] = '<table><tbody>';
$form[$type]['#suffix'] = '</tbody></table>';
_モジュール名_erase_title_display($form);
foreach ($form[$type] as $field_name => &$field) {
if (strpos($field_name, '#') !== 0 && is_array($field)) {
$label = $required = $display = $visibility = '';
if (isset($field['#title'])) {
$label = $field['#title'];
}
$required = !empty($field['#required']);
if ($required) {
$label .= '<span class="form-required" title="このフィールドは必須です。">*</span>';
}
if (!$label) {
$display = 'display: none;';
}
// tr.class.
$tr_class = str_replace('_', '=', $field_name).'-tr';
// th, td.
foreach (array('#prefix', '#suffix') as $t) {
if (!isset($field[$t])) {
$field[$t] = '';
}
}
$field['#prefix'] = str_replace(
array('[tr_class]', '[tr_style]', '[th_style]', '[label]'),
array($tr_class, $display, $visibility, $label),
'<tr class="[tr_class]" style="[tr_style]"><th style="[th_style]">[label]</th><td>'
).$field['#prefix'];
$field['#suffix'] .= '</td></tr>';
}
}
}
}
}
}

function _モジュール名_taxonomy_parents_push($tid) {
static $tree = array();
$term_name = '';
if ($term = taxonomy_term_load($tid)) {
$term_name = $term->name;

if (!isset($tree[$term->vid])) {
$tree[$term->vid] = array();
$t = taxonomy_get_tree($term->vid);
foreach ($t as $obj) {
$tree[$term->vid][$obj->tid] = $obj;
}
}
if (!empty($tree[$term->vid][$term->tid]->parents[0])) {
$term_name = _モジュール名_taxonomy_parents_push($tree[$term->vid][$term->tid]->parents[0]).($term_name? '-'.$term_name: '');
}
}
return $term_name;
}

ページ

OTHER FAQ

Drupal開発・運用の疑問/質問の答えはここに

無料ユーザー登録すると質問できます。

カテゴリ Core Ver. 関連モジュール タイトル昇順で並び替える
コンテンツの管理 7,51 Views Data Export Views Data ExportでCSVデータが欠けてしまう
サイトの環境設定 7.38 Views Bulk Operation VBO(Views Bulk Operation)で指定したアクションが表示されない
ユーザ 7.23 PHP user_load_multiple()の復帰値
言語 6.22 URLエイリアスを使った場合に、翻訳したページで同じURLエイリアスが使えないという不具合
Migrate 9.x drush config Upgrade source(環境) を 変更したときにやるべきこと
テーマ 8.3x Core Twig開発用の設定
テーマ 8.9.x Twig Twig で 月末日を算出する方法
コンテンツの作成 7.50 Expanding Textareas Textareaフォームの行サイズを自動調整するモジュール
タクソノミー 7.15 Entity_Trarnslation Taxonomy TaxonomyのEntity Translation
SSH 7.50 ProxyCommand SSH IP制限を1コマンドで通過する
メール 7.50 Smtp smtpでGmailアカウントを使いたい
ニュースレター 7.34 Simple news Simplenewsで追加顧客(リスト)だけにニュースレターを配信する方法
SFTP 8.4x SFTP RSA SFTP(RSA)でファイル転送(送信)する方法
サイトの環境設定 7.15 Secure Pages Secure Pagesが急に機能しなくなった
PCRE 7.50 preg_match()がおかしい
サイトの構築 7.19 Plesk Pleskでdrupal7(プライベートファイルシステム)を使う場合の注意点
JavaScript 7.34 PHP PHPからJavaScriptに変数値を渡したい
PhpStorm 7.50 LocalForward PhpStormから踏み台を使う
PHP-FPM 8.9.x PHP PHP-FPM 環境で .htaccess に php_value を 書いてもダメ
サイトの構築 7.41 Rules Paygent モジュールについて

ページ