web-dev-qa-db-ja.com

クイズにカスタムフィールドを追加する

クイズがあります。質問を作成するためのコンテンツタイプがあります。テキストフィールドを追加しました(ユーザーが回答を見つけられる場所へのリンクが表示されます)。

質問自体を見ると、テキストフィールドが追加され、画面に表示されています。しかし、質問がクイズの一部である場合、テキストフィールドはもうありません(画面上にもコード内にもありません)。

誰が私を助けられるか?

多分私はある種のフックを Quiz モジュールに追加する必要がありますが、フック/カスタムモジュールがどのように機能するのかわかりません。

前もって感謝します。

1
tim

これを行うには、おそらく多くの方法があります。私もまだ新しいので、気楽にやってください。

分類法quizを作成することをお勧めします。 quizの各リスト項目があなたの質問になります。次に、コンテンツタイプanswerの場合、questionという名前のフィールドを使用してterm referenceを選択し、ウィジェットタイプとして選択リストを選択します。そうすれば、ユーザーが新しいコンテンツanswerを作成し、分類法quizからの質問の1つを参照するときに、questionをクリックするだけで、 answerのリスト。

他の方法は Node Reference を使用することですが、質問自体を参照する方法を気にすることができませんでした。おそらく Relation がうまくいくでしょう。

しかし、最初に私の最初の提案を試してください。

1
lusketeer

クイズ7.x-5.0-alpha4 + 72-devでは、配列構造が多少変更されています。あなたはこのコードを使いたいでしょう:

/**
 * Implements hook_form_FORM_ID_alter()
 */
function my_module_form_quiz_question_answering_form_alter(&$form, &$form_state, $form_id) {
  // Print custom fields on the question page during the quiz.
  foreach ($form['questions'] as $node_key => $node_value) {
    $qnode = node_load($form['questions'][$node_key]['header']['body']['#object']->nid);
  }

  $field_source_url = !empty($qnode->field_source[LANGUAGE_NONE][0]['url']) ? $qnode->field_source[LANGUAGE_NONE][0]['url'] : '';
  $field_source_title = !empty($qnode->field_source[LANGUAGE_NONE][0]['title']) ? $qnode->field_source[LANGUAGE_NONE][0]['title'] : $field_source_url;
  $field_source = l($field_source_title, $field_source_url);

  $form['navigation']['#prefix'] = theme('question_link', array(
    'field_source' => $field_source,
  ));
}

/**
 * Implements hook_theme()
 *
 * @return array
 */
function my_module_theme() {
  $items = array();
  $theme_path = drupal_get_path('theme', 'my_theme') . '/templates';

  $items['question_link'] = array(
    'path' => $theme_path,
    'template' => 'question-link',
    'variables' => array(
      'field_source' => NULL,
    ),
  );

  return $items;
}

次に、sites/all/themes/my_theme/templates/question-link.tpl.php

<?php if($field_source): ?>
  <strong>Source field</strong>
  <div class="question-field-source"><?php print $field_source; ?></div>
<?php endif; ?>

キャッシュをクリアして、新しいテンプレートファイルのアラートDrupalを通知します。

0
esod

カスタムフィールドがクイズの質問フォームに表示されていないと思います。パスは、たとえばnode/8/takeです。 Quiz モジュールによって作成されたカスタムフォーム/ページです。

カスタムモジュールの hook_form_alter() を使用してフォームを変更する必要があります。次に、ノード(質問)をロードして node_load() を使用してフィールド値を取得し、#markup属性を使用してフォームに追加する必要があります。

function MYMODULE_form_alter(&$form, &$form_state, &$form_id){
    if($form_id == 'quiz_question_answering_form'){
        $qnode = node_load($form['question_nid']['#value']);
        $form['link2answer'] = array(
            '#markup' => l('See answer', $qnode->field_link2answer['und'][0]['safe_value']),
        );
    }
}

カスタムモジュールの作成方法がわからない場合は、 ドキュメント を確認してください。

0
Sithu