Печать терминов в узле в несколько столбцов, отсортированных по убыванию - PullRequest
0 голосов
/ 28 июня 2010

У меня есть приблизительно 20 флажков контента-таксономии из одного поля («функции»).Проверенные термины отображаются в node-example.tpl.php.Я пытаюсь показать эти термины контент-таксономии в двух столбцах, отображаемых / отсортированных в нисходящем порядке, а не поперек.

Я пытаюсь сделать два бита кода, чтобы выполнить это ... но мои навыки phpеще не до вызова.Я не могу получить все значения массива, сгенерированные в цикле foreach, для распознавания вторым разделом кода.

Приведенный ниже код был взят (и изменен) из следующих источников:

http://drupal.org/node/312812

roscripts.com / PHP_display_data_on_columns-127.html

Я пытаюсь использовать следующий код в моем файле node-example.tpl.php.

<?php
  echo '<table>';
  foreach ($node->field_features as $delta => $value){
  $term = taxonomy_get_term($node->field_features[$delta]['value']);
  $term_name = check_plain($term->name);
  }

  // Default # of Columns
  $numcols = 2;

  // Number of Items
  $numitems = count($term_name);

  // Number of Rows
  $numrows = ceil($numitems/$numcols);


    for ($row=1; $row <= $numrows; $row++)
    {
        $cell = 0;
        echo ' <tr>'."\n";
        for ($col=1; $col <= $numcols; $col++)
        {
        echo '  <td>'."\n";

        if ($col===1)
        {
            $cell += $row;
            print $term_name[$cell - 1];
        }
        else {
            $cell += $numrows;
            print $term_name[$cell - 1];
        }
        echo '  </td>'."\n";
        }
        echo ' </tr>'."\n";
    }

  echo '</table>';

?>

Ответы [ 2 ]

0 голосов
/ 29 июня 2010

Вы можете использовать theme('table', $headers, $rows) для рендеринга вашей таблицы с помощью механизма тем.

// Default # of Columns
$numcols = 2;
$rows = array();
$cell_count = 0;
foreach ($node->field_features as $delta => $value) {
  $term = taxonomy_get_term($node->field_features[$delta]['value']);
  $term_name = check_plain($term->name);
  $cell_count += 1;
  $row_index = floor($cell_count / $numcols);
  $rows[$row_index][] = $term_name;

}
print theme('table', array(), $rows);
0 голосов
/ 28 июня 2010

Хорошо, я сработал, используя ответ на другой вопрос / ответ по циклу foreach на этом сайте.

Объявление массива $ items вне зацикливание и использование $ items [] для добавления элементов в массив.

Это последний код, который делает именно то, что я хотел.

<?php
  echo '<table>';

  $items = array();
  foreach ($node->field_features as $delta => $value)
  {
  $term = taxonomy_get_term($node->field_features[$delta]['value']);
  $term_name = check_plain($term->name);
  $items[] = $term_name;
  }

  // Default # of Columns
  $numcols = 2;

  // Number of Items
  $numitems = count($items);//print $numitems;

  // Number of Rows
  $numrows = ceil($numitems/$numcols);//print $numrows;


    for ($row=1; $row <= $numrows; $row++)
    {
        $cell = 0;
        echo ' <tr>'."\n";
        for ($col=1; $col <= $numcols; $col++)
        {
        echo '  <td>'."\n";

        if ($col===1)
        {
            $cell += $row;
            print $items[$cell - 1];
        }
        else {
            $cell += $numrows;
            print $items[$cell - 1];
        }
        echo '  </td>'."\n";
        }
        echo ' </tr>'."\n";
    }

  echo '</table>';

  ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...