web-dev-qa-db-ja.com

現在の質問のNIDを取得するにはどうすればよいですか?

複数の質問を含むクイズを取る場合、現在の質問のNIDを取得するにはどうすればよいですか? URLにはクイズのNID(_node/1234_)のみが含まれています。クイズを開始したときでも、このNIDしか使用できません(_node/1234/take/1_)。私がnode_load(arg(1))の場合、クイズにどのような質問がどのようにマッピングされるかについての手掛かりもありません。

クイズ -7.x-5.0-alpha10

2
leymannx

@ J.Reynoldsに正しい方向を教えてくれてありがとう!

/**
 * Helper function to get current question's NID.
 * @return string node ID
 */
function _current_question_nid() {

  // Presume a URL node/1234/take/2 meaning we are at the second question
  // of a quiz, where arg(1) is the quiz NID

  // Now let's look inside SESSION. There's our current quiz NID.
  if (array_key_exists(arg(1), $_SESSION['quiz'])) {

    // Inside there is the current result ID.
    $result_id = $_SESSION['quiz'][arg(1)]['result_id'];

  } else {

    // A little bit different to get the current result ID at last question.
    $result_id = $_SESSION['quiz']['temp']['result_id'];

  }

  // Now we can load the quiz results from that result ID.
  $result = quiz_result_load($result_id);
  // There all question NIDs are inside, nicely ordered, yay!

  // Finally let's take the question number and get its NID.
  $current = $result->layout[arg(3)];
  return $question_nid = $current['nid'];
}
1
leymannx