Изменить форму профиля контента, чтобы отображать флажки в матрице - PullRequest
0 голосов
/ 22 февраля 2010

Мне нужно показать такую ​​матрицу http://eugen.gotdns.com/test/zeitplaner.png в форме профиля контента. Я могу расположить чекбоксы с помощью CSS таким образом, но мне также понадобятся некоторые метки сверху и слева. Должен ли я работать с массивом $ form, чтобы добавить некоторые метки? Может ли это быть сделано с помощью CSS?

Ответы [ 2 ]

3 голосов
/ 23 февраля 2010

Я согласен с Майком Криттенденом, что способ сделать это - использовать таблицы, хотя я не согласен с тем, как он хочет это сделать.

Лучшее решение - создать собственную функцию темы для формы. В основном то, что вы делаете, это перебирает элементы формы и отображает их. Проще всего сделать их по одной строке таблицы за раз.

Я скопировал некоторый старый код, который показывает этот пример, но вам, вероятно, нужно его немного изменить. У меня были некоторые неопределенности, не зная, какие строки и столбцы мне понадобятся, поэтому я сделал это более общим, что вам потребуется, и отправил некоторые данные с формой, когда я ее сгенерировал.
Вы можете визуализировать элементы формы любым способом, это также зависит от того, как вы структурировали элементы формы, как вы можете проходить циклы, если это возможно. Код ниже основан на такой структуре формы: $form['category']['item'] = checkbox. Если вы по-разному структурировали элементы формы, вам нужно будет по-разному просматривать их. Однако то, что вам нужно будет сделать, это идентифицировать элементы формы по одной строке за раз. $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;
}
0 голосов
/ 22 февраля 2010

Хотя теоретически вы можете сделать это с помощью CSS, это будет кошмар совместимости браузера.

Лучше всего изменить массив $ form, чтобы он превратился в

...