Таблица: Чекбокс+Данные+Селект

Главные вкладки

Аватар пользователя serzzzh serzzzh 26 декабря 2007 в 12:51

Уважаемые знатоки!
Возникла проблема - необходимо создать средствами Друпала таблицу (подобную Управление сайтом-Содержание-Содержание или Admin/Content/node), где первый столбец Checkbox (верхний отмечает все) и остальные столбца из таблицы БД. Ниже Select с выбором групповой операции для отмеченных строк.

Сейчас у меня получается нарисовать тот же checkbox, но как до него добраться потом - загадка. Пример:

<legend><b>Список</b></legend>
<?php

$header = array(
  array('data' => t('<input type="checkbox" name="cb0">')),
  array('data' => t('Code'), 'field' => 't_Сode', 'sort' => 'asc'),
  array('data' => t('Name'), 'field' => 't_name')
);

$sql = "SELECT uid, name FROM b_users";
$sql .= tablesort_sql($header);
$result = pager_query($sql, 50);

  $i = 0;
while ($account = db_fetch_object($result)) {
  $i++;
  $rows[] = array('<input type="checkbox" name="cb'.$i.'">', $account->uid, $account->name);
}
$output = theme('table', $header, $rows);
$output .= theme('pager', NULL, 50, 0);
print ($output);
?>

Также понравился пример:

 $form['city'] = array(
  '#type' => 'select',
  '#title' => $list_titles['city'],
  '#options' => $list_cities,
  '#prefix' => '<table height= \'30\' width=\'80%\'><tr><td width=\'100\'>',
  '#suffix' => '</td>', '#required' => TRUE,
  '#default_value'=> $node->city
  );
  $form['adr'] = array('#type' => 'textfield', '#title' => $list_titles['adr'], '#required' => TRUE,
  '#prefix' => '<td>',
  '#suffix' => '</td></tr></table>',
  '#default_value'=> $node->adr
  );

Также можно нарисовать туже таблицу на FORMS_API в цикле: while ($account = db_fetch_object($result))
но проделать такой трюк как в Admin/Content/node все равно не вижу способа

Оч. нужен малюсенький примерчик, например на основе SELECT uid, name FROM {users}
либо вопрос - а как найти исходники этой же таблицы в Admin/Content/node ?

Заранее спасибо ответившим...

Комментарии

Аватар пользователя serzzzh serzzzh 27 декабря 2007 в 12:47

К сожалению пока не получается переварить этот пример, еще раз прошу помощи новичку в друпале.
Сам принцип вроде понятен - в элементе формы 'nodes' создаются чекбоксы, в опции кот. загоняется необходимая таблица -
и работает оно вот в этой строке:
$form['nodes'] = array('#type' => 'checkboxes', '#options' => $nodes);

Но общий результат - совсем не то что надо - нет "главного" чекбокса и результаты с чекбоксами не хотят оформляться в таблицу (это из-за темы 'pager'??)

Итого: вот пример, где я пытаюсь выкинуть лишнее, чтоб осталась только суть:
<?php
return drupal_get_form('my_table2');

///////////////////////////////
function my_table2() {
$result = pager_query('SELECT uid as nid, name FROM {users}');

while ($node = db_fetch_object($result)) {
$nodes[$node->nid] = '';
$form['title'][$node->nid] = array('#value' => $node->nid);
$form['name'][$node->nid] = array('#value' => $node->name);
}
$form['nodes'] = array('#type' => 'checkboxes', '#options' => $nodes);
$form['pager'] = array('#value' => theme('pager', NULL, 50, 0));
return $form;
}
?>

Подскажите плиз, где я накосячил ((

ниже друпаловская функция-источник вдохновения:
<?php
function node_admin_nodes() {
$filter = node_build_filter_query();

$result = pager_query('SELECT uid as nid, name FROM {users}');

$destination = drupal_get_destination();
while ($node = db_fetch_object($result)) {
$nodes[$node->nid] = '';
$form['title'][$node->nid] = array('#value' => l($node->title, 'node/'. $node->nid) .' '. theme('mark', node_mark($node->nid, $node->changed)));
$form['name'][$node->nid] = array('#value' => check_plain(node_get_types('name', $node)));
$form['username'][$node->nid] = array('#value' => theme('username', $node));
$form['status'][$node->nid] = array('#value' => ($node->status ? t('published') : t('not published')));
$form['operations'][$node->nid] = array('#value' => l(t('edit'), 'node/'. $node->nid .'/edit', array(), $destination));
}
$form['nodes'] = array('#type' => 'checkboxes', '#options' => $nodes);
$form['pager'] = array('#value' => theme('pager', NULL, 50, 0));
return $form;
}
?>