クイズがあります。質問を作成するためのコンテンツタイプがあります。テキストフィールドを追加しました(ユーザーが回答を見つけられる場所へのリンクが表示されます)。
質問自体を見ると、テキストフィールドが追加され、画面に表示されています。しかし、質問がクイズの一部である場合、テキストフィールドはもうありません(画面上にもコード内にもありません)。
誰が私を助けられるか?
多分私はある種のフックを Quiz モジュールに追加する必要がありますが、フック/カスタムモジュールがどのように機能するのかわかりません。
前もって感謝します。
これを行うには、おそらく多くの方法があります。私もまだ新しいので、気楽にやってください。
分類法quiz
を作成することをお勧めします。 quiz
の各リスト項目があなたの質問になります。次に、コンテンツタイプanswer
の場合、question
という名前のフィールドを使用してterm reference
を選択し、ウィジェットタイプとして選択リストを選択します。そうすれば、ユーザーが新しいコンテンツanswer
を作成し、分類法quiz
からの質問の1つを参照するときに、question
をクリックするだけで、 answer
のリスト。
他の方法は Node Reference を使用することですが、質問自体を参照する方法を気にすることができませんでした。おそらく Relation がうまくいくでしょう。
しかし、最初に私の最初の提案を試してください。
クイズ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を通知します。
カスタムフィールドがクイズの質問フォームに表示されていないと思います。パスは、たとえば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']),
);
}
}
カスタムモジュールの作成方法がわからない場合は、 ドキュメント を確認してください。