2017-02-08 12 views
2

私はいくつかのラベルを一度だけ印刷しようとしていますので、ループごとに4つのラベルがあります。Wordpressはforループで一度だけエコーします

だから、私はループし、ラベルごとにラベルを印刷しようとしています。

2番目に、ループごとに4つのラベルが印刷されています。

いくつかの写真があります。私が欲しいもの

- それは現在何http://i.imgur.com/LPbqd53.png - あなたが入力してラベルを印刷しているので、http://i.imgur.com/WqNrgBc.png

ここでは、実際にあなたが間違ってやっている私のコード

<div class="wpt_test fill_form"> 

    <div class="answers"> 
     <div class="content"> 
     <form 
     <?php foreach ($formAttributes as $key => $value):?> 
      <?php echo $key ?>="<?php echo htmlspecialchars(is_array($value) ? json_encode($value) : $value) ?>" 
     <?php endforeach; ?>> 
     <?php if ($isShowContent): ?><div class="content" style="margin:0;"><?php echo $content ?></div><?php endif ?>  
     <?php if ($shortDescription): ?><div class="short-description"><?php echo $wp->autoParagraphise($shortDescription) ?></div><?php endif ?> 
     <?php $wp->doAction('wp_testing_template_fill_form_questions_before') ?>        
      <?php foreach($questions as $q => $question): /* @var $question WpTesting_Model_Question */ ?> 
      <?php $wp->doAction('wp_testing_template_fill_form_question_before', $question, $q) ?> 
      <div class="question">  
       <div class="title"> 
       <span class="question-title" style="width:100%;"><?php echo $question->getTitle() ?> 
       <?php $wp->doAction('wp_testing_template_fill_form_label_end', array('required' => true)) ?></span> 
       <?php if (!$isMultipleAnswers): ?> 
        <input type="hidden" name="<?php echo $answerIdName ?>[<?php echo $answerIndex ?>]" value="" /> 
       <?php endif ?> 
       </div> 
       <div class="answer-block"> 
       <?php foreach($question->buildAnswers() as $a => $answer): /* @var $answer WpTesting_Model_Answer */ ?> 
        <?php $answerId = 'wpt-test-question-' . $question->getId() . '-answer-' . $answer->getId() ?> 
        <div class="question-titles"> 
        <div class="question-labels"> 
        <label for="<?php echo $answerId ?>"> 
         <input type="<?php echo $isMultipleAnswers ? 'checkbox' : 'radio' ?>" id="<?php echo $answerId ?>" 
          data-errormessage="<?php echo $isMultipleAnswers 
           ? __('Please select at least one answer.', 'wp-testing') 
           : __('Please choose only one answer.', 'wp-testing') ?>" 
          <?php if (0 == $a): ?>required="required" aria-required="true"<?php endif ?> 
          name="<?php echo $answerIdName ?>[<?php echo $answerIndex ?>]" value="<?php echo $answer->getId() ?>" /> 
         <?php echo $answer->getTitleOnce() ?> 
        </label>  
        </div> 
        </div> 
        <?php if ($isMultipleAnswers) {$answerIndex++;} ?> 
       <?php endforeach ?> 
       </div> 
       <?php $wp->doAction('wp_testing_template_fill_form_question_after', $question, $q) ?> 
       <?php if (!$isMultipleAnswers) {$answerIndex++;} ?> 
      <?php endforeach ?> 
      </div> 

      <?php $wp->doAction('wp_testing_template_fill_form_questions_after') ?> 

      <?php if($isFinal): ?> 
      <p> 
       <input type="submit" class="button" value="<?php echo $submitButtonCaption ?>" /> 
       <?php if($stepsCounter): ?><span class="steps-counter"><?php echo $stepsCounter ?></span><?php endif ?> 
      </p> 
      <?php else: ?> 
      <div class="wpt_warning"> 
       <h4><?php echo __('Test is under construction', 'wp-testing') ?></h4> 
       <p><?php echo __('You can not get any results from it yet.', 'wp-testing') ?></p> 
      </div> 
      <?php endif ?> 
      <?php foreach($hiddens as $name => $value): ?><input type="hidden" name="<?php echo htmlspecialchars($name) ?>" value="<?php echo htmlspecialchars($value) ?>" /><?php endforeach ?> 
     </form> 
     </div> 
    </div> 

    </div> 

答えて

1

リセットを使用してこれを修正することができました。

<?php if($i==0): ?> 

<?php foreach($question->buildAnswers() as $a => $answer): /* @var $answer WpTesting_Model_Answer */ ?> 

<?php $answerId = 'wpt-test-question-' . $question->getId() . '-answer-' . $answer->getId() ?> 

<label for="<?php echo $answerId ?>"> <?php echo $answer->getTitleOnce(); ?></label> 

<?php if ($isMultipleAnswers) {$answerIndex++;} ?> 

<?php endforeach ?> 

<?php $i = 1; ?> 

<?php endif; ?> 
1

です。

最初に静的ラベルを印刷することができ、その後、適切に入力を整列させるためにあなたはまた、テーブル<tr><td>を使用することができ

としてforeachの入力表示インライン

印刷しなければなりません。

2

これはコピー・ペースト・ソリューションではありません。あなたのコードには、それらが何を含んでいるのかわからない変数がありますが、これはソリューションの潜在的なアイデアとして役立ちます。本質的に望ましい結果は、データの「表」です。 HTML構造を構築するためにテーブルやdivを使用するかどうかはあなたのところにあります。あなたは、ブートストラップや基礎や別のCSSフレームワークによって提供されるようなレイアウトを使うことができます。この例では、テーブルを使用して構造体を提供しています。テーブルヘッドの反復のために、配列のようなコンテナに回答ラベルを描画したいと思うでしょう。次に、各回答を入力だけで提示し、各反復でそれを印刷するかどうかを心配する必要はありません。お役に立てれば!

<?php 
/** 
* @var array $answerLabels 
* @var WpTesting_Model_Question[] $questions 
*/ 
?> 
<table> 
    <thead> 
     <tr> 
      <td></td> 
      <?php foreach ($answerLabels as $label): ?> 
       <td><?= $label ?></td> 
      <?php endforeach; ?> 
     </tr> 
    </thead> 
    <tbody> 
     <?php foreach ($questions as $question): ?> 
      <tr> 
       <td><?= $question->getTitle() ?></td> 
       <?php foreach ($question->buildAnswers() as $index =>  $answer): 
        $answerId = 'wpt-test-question-' . $question->getId() . '-answer-' . $answer->getId(); 
       ?> 
        <td> 
         <label for="<?= $answerId ?>"> 
          <input type="<?= $isMultipleAnswers ? 'checkbox' : 'radio' ?>"  
            id="<?= $answerId ?>" 
            data-errormessage="<?= $isMultipleAnswers 
             ? __('Please select at least one answer.', 'wp-testing') 
             : __('Please choose only one answer.', 'wp-testing') ?>" 
           <?php if (0 == $index): ?> 
            required="required" 
            aria-required="true" 
           <?php endif ?> 
            name="<?= $answerIdName ?>[<?= $answerIndex ?>]" 
            value="<?= $answer->getId() ?>"/> 
         </label> 
        </td> 
       <?php endforeach; ?> 
      </tr> 
     <?php endforeach; ?> 
    </tbody> 
</table> 
+0

基本的に、回答は質問に割り当てられ、回答は各質問で同じです。だから、質問から、それは質問から答えを得る。 –

+0

答えがすべての質問について同じなら、なぜ$ questions配列と$ answers配列を持つことでDRYしないのですか?すべての回答が質問に共通することが分かっているので、これを行うことでパフォーマンスが向上し、HTMLを構築する際のより明確で明確な実装が可能になります。あるいは、単一のページに複数のタイプの質問を処理させたいという欲求がありますか?私はそこに何か不足しているかもしれない。 –

+0

私はプラグインを使用していますので、私自身は機能を変更することができません。基本的に、各質問には同じ回答セットがあり、このコードはquestiondをループしてラベルを印刷します。これは複数の回答を持つテストを作成できたためですが、この場合は同じ回答セットしかありません。しかし、私は一度だけ4つの異なる答えを印刷する必要がありますが、質問のループごとに印刷してください。 –

関連する問題