我需要在内容配置文件表单中显示类似此http://eugen.gotdns.com/test/zeitplaner.png的矩阵。我可以用这种方式安排CSS的复选框,但我还需要在顶部和左侧的一些标签。我应该使用$ form数组来添加一些标签吗?这可以用css完成吗?
答案 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元素。无论哪种方式都可行,但我会去前缀/后缀方向只是因为它会更清洁。
如果您需要帮助实现此功能,请随时询问(可能在另一个问题中)。