Drupal中数据库驱动的选择表(下拉)块

时间:2012-09-30 03:58:41

标签: drupal drupal-forms

我对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数据已成功填充。这只是表单显示似乎无法正常工作。

1 个答案:

答案 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函数的自定义函数。你甚至可以用模块方法制作页面/块组合。