修改内容配置文件表单以显示矩阵中的复选框

时间:2010-02-22 17:17:22

标签: drupal drupal-6

我需要在内容配置文件表单中显示类似此http://eugen.gotdns.com/test/zeitplaner.png的矩阵。我可以用这种方式安排CSS的复选框,但我还需要在顶部和左侧的一些标签。我应该使用$ form数组来添加一些标签吗?这可以用css完成吗?

2 个答案:

答案 0 :(得分:3)

我同意Mike Crittenden的说法,这样做的方法是使用表格,我不同意他想要这样做的方式。

最佳解决方案是为表单创建自定义主题功能。基本上你用它来循环表单项并渲染它们。最简单的方法是一次渲染一个表格行。

我复制了一些显示此示例的旧代码,但您可能需要对其进行一些修改。我有一些不确定性,不知道我需要哪些行和列,所以我已经使你需要更通用了,并在生成它时发送了一些带有表格的数据。
您可以以任何方式呈现表单项,这还取决于您如何构建表单项,如果可能的话,您将如何循环。下面的代码基于这样的表单结构:$form['category']['item'] = checkbox。如果您以不同方式构建表单项,则需要以不同的方式遍历它们。但是你需要做什么,id一次一行地呈现表单项。 $rows将是一个数组数组,其中的每个数组都是矩阵的行,并且应该按顺序包含该行中的元素。

当您渲染表单项时,Drupal将知道它已被渲染,因此当您使用drupal_render($form)时,只有未呈现的表单项将呈现为提交按钮等。

function theme_form_id($form) {
    $labels = array(
      ...
    );
    $cats = $form['categories']['#value']; // This would for you be Mo, Di ...
    $pros = $form['profile_items']['#value']; // array of name the form items have.
    $header = array('Ziet' ...);
    $rows = array();

    foreach ($pros as $item) {
        $new_row = array($labels[$item]);
        foreach ($cats as $cat) {
            $new_row[] = array('data' => drupal_render($form[$cat][$item]), 'class' => 'checkbox');
        }
        $rows[] = $new_row;
    }
    $output = theme('table', $header, $rows);
    $output .= drupal_render($form);
    return $output;
}

答案 1 :(得分:0)

虽然理论上你可以用CSS做到这一点,但这将是一个兼容浏览器的噩梦。

最好的办法是修改$ form数组,使其成为< table>。您可以使用单个元素的前缀和后缀(用于打开和关闭td和tr)来执行此操作,或者您可以在表单字段之间添加#markup元素。无论哪种方式都可行,但我会去前缀/后缀方向只是因为它会更清洁。

如果您需要帮助实现此功能,请随时询问(可能在另一个问题中)。