พิมพ์ฟิลด์ใน drupal

ฉันกำลังพยายามให้ Drupal พิมพ์รายการที่มีสองฟิลด์ที่แตกต่างกันในอาร์เรย์เดียวกัน ก่อนอื่นมาฟิลด์ A จากนั้นฟิลด์ B และมันจะพิมพ์ในลักษณะนี้จนกว่าจะพิมพ์อาเรย์ทั้งหมด

ผลลัพธ์ที่ฉันพยายามได้รับคือสิ่งที่ต้องการ

<tr>
  <td>Field_1[value1]</td>
  <td>Field_2[value1]</td>
</tr><tr>
  <td>Field_1[**value'n'**]</td>
  <td>Field_2[**value'n'**]</td>
</tr>

จนกว่าจะพิมพ์ค่าทั้งหมด

แก้ไข. ค้นพบวิธีหนึ่งในการบรรลุสิ่งนี้โดยตรงใน node--testnode.tpl.php

<table>
<?php if ($content['field_test'][1]): ?>
        <tr><td><?php print render($content['field_test'][0])?></td><td><?php print render($content['field_test'][1])?></td></tr>
      <?php endif; ?>
<?php if ($content['field_test'][3]): ?>
        <tr><td><?php print render($content['field_test'][2])?></td><td><?php print render($content['field_test'][3])?></td></tr>
      <?php endif; ?>     
<?php if ($content['field_test'][5]): ?>
        <tr><td><?php print render($content['field_test'][4])?></td><td><?php print render($content['field_test'][5])?></td></tr>
      <?php endif; ?>   
</table>

การแก้ไขประการที่สอง การทำงานด้วยตนเองเท่านั้นคือบอกว่าคุณต้องการทำซ้ำกี่ครั้ง

<dl class="My Class">
        <?php
            $i = 0;
            $counter = 2 * render ($content['field_counter_slides'][0]) -1;
                while ($i <= $counter):
                    if ($content['field_test'][1]){
                        echo "<dt>";
                        print render ($content['field_test'][$i]);
                        $i++;
                        echo "</dt><dd>";
                        print render ($content['field_test'][$i]);
                        echo "</dd>";
                        $i++;
                    }
                endwhile;
        ?>
    </dl>

person 25r43q    schedule 12.09.2011    source แหล่งที่มา


คำตอบ (1)


มันค่อนข้างยากที่จะตอบโดยไม่รู้มากกว่านี้ แต่สิ่งนี้น่าจะทำได้:

$header = array();
$rows = array();
foreach ($node->field_my_field[$langcode] as $key => $field_entry) {
  $rows[] = array(
    $field_entry['value'],
    $node->field_my_second_field[$langcode][$key]['value']
  );
}

$output = theme('table', array('header' => $header, 'rows' => $rows));

คุณต้องแน่ใจว่าตัวเองมีจำนวนรายการเท่ากันในแต่ละฟิลด์ เพื่อที่จะมีรายการ field_my_second_field เสมอสำหรับแต่ละรายการที่รันผ่านลูป foreach

person Clive    schedule 13.09.2011
comment
ใช่ ฉันอีกแล้ว...ไม่สามารถออกจากไซต์ที่กำลังบานสะพรั่งนี้ได้ด้วยเหตุผลบางอย่าง! - person Clive; 13.09.2011
comment
ไคลฟ์ คุณกลับมาแล้ว :) ฉันควรใส่โค้ดนี้ไว้ที่ไหน? ทุกอย่างเข้าไปใน node--type.tpl-file เหมือนเดิมหรือไม่? (ฉันยังไม่คุ้นเคยกับ foreach, do While และ if-statements ใน Drupal/PHP) ขออภัยสำหรับภาษาอังกฤษที่ไม่ดีของฉัน ไม่ใช่ภาษาแม่ของฉัน พรุ่งนี้จะลองแล้วจะมาบอกผลครับ ขอบคุณมาก. - person 25r43q; 13.09.2011
comment
วิธีแก้ปัญหาด้านบนใช้งานได้ (คำสั่ง if) แต่ไม่ใช่รหัสที่ดี (แม้ว่าผลลัพธ์จะถูกต้องก็ตาม) มีความเฉพาะเจาะจงมากขึ้นหรือไม่? - person 25r43q; 13.09.2011