我对Drupal完全不熟悉,请原谅我在我的问题中做出的任何可怕的假设/谎言。
我正在尝试将数据库驱动的下拉框添加到我的侧边栏。我目前正在通过创建自定义块来实现这一点(即使是正确的方法?)。目前,当我甚至可以获得要渲染的块时,它只显示单词“Array”,而不是内容。我测试了我的“getGames”函数的输出,并正确填充了数组。
以下是当前代码:
<?php
$games_array = getGames();
return drupal_get_form('gamesForm', $games_array);
function getGames()
{
$query = "SELECT ID, Name FROM drupGN.Game ORDER BY Name;";
$results = db_query($query);
foreach ($results as $item) {
$key = $item->ID;
$value = $item->Name;
$games_array[$key] = $value;
}
return $games_array;
}
function gamesForm($form_state, $games_array)
{
$form['games'] = array(
'#type' => 'select',
'#title' => 'Game Name',
'#options' => $games_array,
'#required' => TRUE,
);
return $form;
}
?>
就像我说的,数据库连接正常,并且$ games_array数据已成功填充。这只是表单显示似乎无法正常工作。
答案 0 :(得分:2)
替换
return drupal_get_form('gamesForm', $games_array);
与
return drupal_render(drupal_get_form('gamesForm', $games_array));
由于你没有提到你的Drupal版本,并且你说你在块中看到“数组”,我最好的猜测是你的Drupal版本是7. Drupal 7表单需要drupal_render在某处调用(它会自动发生)页面回调但不在块中)。这就是你在那里看到“阵列”这个词的原因。
这不是FYI的正确方法。您可以轻松编写定义新块及其block_view函数的自定义函数。你甚至可以用模块方法制作页面/块组合。