Поля печати в друпале

Я пытаюсь заставить 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>

Пока не будут напечатаны все значения.

РЕДАКТИРОВАТЬ. Выяснил один из способов добиться этого непосредственно в узле — 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 как есть? (Я еще не привык к foreach, dowhile и операторам if в Drupal/PHP) Извините за мой плохой английский, не мой родной язык. Завтра попробую и скажу результат. Большое спасибо. - person 25r43q; 13.09.2011
comment
Приведенное выше решение работает (условия if), но оно не очень хорошо закодировано (даже несмотря на то, что вывод правильный). Это более конкретно? - person 25r43q; 13.09.2011