在theme_table()中为foreach()提供的参数无效,但我传递的是有效数组?

时间:2016-08-23 01:27:34

标签: php drupal-7 drupal-modules drupal-theming

好的,所以我对Drupal很新,我正在尝试创建一个自定义模块,用于生成用户可以导航到的页面。当用户点击页面时,我正在尝试从数据库中检索所有内容片段的标题,并使用table_theme将它们排列在表格中。除了在表格中生成行外,一切正常。它在页面顶部给我这条消息:

“警告:为theme_table()中的foreach()提供的参数无效(/srv/bindings/4d0bbd3c7be847abb26f62e0dacbcc24/code/includes/theme.inc的第2107行)。”

对于从数据库中检索的每个标题,此消息都会出现一次。这是我的content_titles.module文件(我的自定义模块文件):

<?php

/**
 * @file
 * A module that creates a page to display all existing content titles
 */

  /**
   * Implements hook_help()
   *
   * Displays help and module information
   *
   * @param path
   *    Which path of the site we're using to display help
   * @param arg
   *    Array that holds the current path as returned from arg() function
   */
  function content_titles_help($path, $arg) {
    switch ($path) {
        case "admin/help#content_titles":
            return '' . t("Displays all existing content titles 
                on an overview page") . '';
            break;
    }
  }

  /**
   * Implements hook_menu()
   * 
   * Enables the module to register a link to be placed in a menu
   */
  function content_titles_menu() {

    $items['test/content_titles'] = array(
        'title' => 'Overview Test Page',
        'page callback' => 'content_titles_simple',
        'access callback' => TRUE,
        'expanded' => TRUE,
        );

    return $items;
  }

  /**
   * Constructs the Content Titles page
   */
  function content_titles_simple() {
    return array('#markup' => create_content_table());
  }

  /**
   * This function will create the table to hold the content titles in
   */
  function create_content_table() {

    // Retrieve content titles from the database
    $results = db_query('SELECT title FROM {node}');

    $header = array('Content Titles');

    $rows = array();
    while ($row = $results->fetchAssoc()) {
        $rows[] = $row['title'];
    }

    print_r($rows); // FOR DEBUGGING PURPOSES

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

    return $output;     
  }

问题似乎在于我使用了主题功能。我不知道我的论点有多么无效。我传递了'table'的主题类型,并且我检查过的两个数组都不是空的(这就是为什么我使用print_r来打印我从数据库中存储我的标题的数组)。我在这里很难过。知道问题可能是什么?

2 个答案:

答案 0 :(得分:1)

感谢大家的帮助,我明白了!我需要将数组推送到$ rows数组而不是值。我改变了这部分代码:

$rows = array();
    while ($row = $results->fetchAssoc()) {
        $rows[] = $row['title'];
    }

要:

$rows = array();
    while ($row = $results->fetchAssoc()) {
        $rows[] = array($row['title']);
    }

答案 1 :(得分:0)

您必须使用以下内容:

  $header = array(
    array('data' => t('Content Titles'), 'field' => 'title'),
  );
  $rows = array();
  $query = db_select('node', 'n')->fields('n', array('title'));
  $pager = $query->extend('PagerDefault')
    ->limit(10);
  $results = $pager->execute();
  foreach ($results as $row) {
    $rows[] = array($row->title);
  }
  return theme('table', array(
    'header' => $header,
    'rows' => $rows)) . theme('pager');

由于