好的,所以我对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来打印我从数据库中存储我的标题的数组)。我在这里很难过。知道问题可能是什么?
答案 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');
由于