Здравствуйте! Подскажите пожалуйста, как вывести таблицу на странице с формой, но ниже формы. Сейчас выводится так, как на скрине. Вывод происходит вот так:
$output = theme('table', $header, $rows);
print $output;
Вложение | Размер |
---|---|
![]() | 94.53 КБ |
Здравствуйте! Подскажите пожалуйста, как вывести таблицу на странице с формой, но ниже формы. Сейчас выводится так, как на скрине. Вывод происходит вот так:
$output = theme('table', $header, $rows);
print $output;
Вложение | Размер |
---|---|
![]() | 94.53 КБ |
Комментарии
Попробуйте так:
<?php
$output = theme('table', $header, $rows);
return $output;
?>
именно так и я делаю) но таблица выводится сверху страницы, а нужно под формой
Лучше подробно напишите что вам нужно делать,возможно вы пробуете это неправильным путем сделать.
Вот на всякий случай код:
function val_t_setting($form_state){
$nodes = db_query("SELECT * FROM {og}");
$options = array('none' => '');
while ($og = db_fetch_object($nodes)) {
$options[] = $og->og_description;
}
$form['group'] = array(
'#type' => 'select',
'#title' => t('Программирование'),
'#options' => $options,
);
$form['sub'] = array(
'#type' => 'submit',
'#value' => 'Загрузить',
'#id' => 'find_user',
'#validate' => array('form_new_name'),
);
if (isset($form_state['storage']['sub'])) {
$header = array('Студент','Баллы');
$students = array();
$rows = array();
// достаем id выбранной группы
$groups = $form['group']['#options'][$form_state['values']['group']];
$group_nid = db_result(db_query("SELECT nid FROM {og} WHERE og_description ='%s'", $groups));
// достаем список студентов
$users = db_query('SELECT * FROM {users} u INNER JOIN {og_uid} o ON u.uid = o.uid WHERE u.status = 1 AND o.nid = %d ORDER BY u.name', $group_nid);
while ($u = db_fetch_object($users)) {
$students[$u->uid] = $u;
}
if (empty($students)) {
drupal_set_message('В группе нет студентов.');
}
foreach ($students as $s => $student) {
// В первой колонке выводим имя студента.
//$row = array($student->name);
//$rows[] = $row;
$balls= db_fetch_object(db_query("SELECT ball FROM {users}
WHERE name = '%s'", $student->name));
$row = array($student->name,$balls->ball);
$rows[] = $row;
};
/* $output = theme('table', $header, $rows);
print $output;*/
$form['nodes'] = array(
'#type' => 'tableselect',
'#header' => $header,
'#rows' => $rows,
'#empty' => t('No content available.'),
);
};
return $form;
}
При этом результат показан на прикрепленном скрине.
Я на dru.io отписывал нужен не код а сама задача
есть список с возможностью выбора группы. я выбираю группу, нажимаю "загрузить" и появляется таблица с именами и баллами. но проблема в том,что она появляется не после формы, а вверху страницы, под админкой, то есть даже не на странице с формой
Плохо помню шестерку, если это не поможет:
<?php
//Устанавливаем ВЕС для элемента формы, чем больше - тем ниже, сотни должно хватить-)
$form['nodes'][#weight]=100;
?>
Тогда надо будет свою темизацию писать для формы.
описать ее в hook_theme
объявить в $form['#theme']='имя_темы'
спасибо, но у меня не элемент формы, а отдельная таблица
Если таблицу сделать элементом формы то будет все хорошо (таблица будет в самой форме и вывести ее можно будет в форме куда угодно).
не совсем коде понятно что такое элемент формы 'nodes' у типа 'tableselect' вроде как нет '#rows'
предлагаю вывести с помощью элемента markup
читаем API form drupal
и сделать вывод с помощью аякса
пример кода
<?php
function mymodule_form($form, &$form_state){
$nodes = db_query("SELECT * FROM {og}");
$options = array('none' => '');
while ($og = db_fetch_object($nodes)) {
$options[] = $og->og_description;
}
$form['group'] = array(
'#type' => 'select',
'#title' => t('Программирование'),
'#options' => $options,
);
$form['sub'] = array(
'#type' => 'submit',
'#value' => 'Загрузить',
'#id' => 'find_user',
'#ajax' => array(
'callback' => 'mymodule_refresh_around',
'wrapper' => 'around-mymodule',
'method' => 'replace',
'effect' => 'fade',),
);
$form['around']=array(
'#prefix' => '<div id = "around-mymodule">',
'#suffix'=>'</div>');
$form['around']['markup']=array('#markup' => '<h3>Сюда будет вставляться HTML</h3>');
return
$form;}
function mymodule_refresh_around($form,&$form_state){
$header = array('Студент','Баллы');
$students = array();
$rows = array();
// достаем id выбранной группы
$groups = $form['group']['#options'][$form_state['values']['group']];
$group_nid = db_result(db_query("SELECT nid FROM {og} WHERE og_description ='%s'", $groups));
// достаем список студентов
$users = db_query('SELECT * FROM {users} u INNER JOIN {og_uid} o ON u.uid = o.uid WHERE u.status = 1 AND o.nid = %d ORDER BY u.name', $group_nid);
while ($u = db_fetch_object($users)) {
$students[$u->uid] = $u;
}
if (empty($students)) {
drupal_set_message('В группе нет студентов.');
}
foreach ($students as $s => $student) {
// В первой колонке выводим имя студента.
//$row = array($student->name);
//$rows[] = $row;
$balls= db_fetch_object(db_query("SELECT ball FROM {users}
WHERE name = '%s'", $student->name));
$row = array($student->name,$balls->ball);
$rows[] = $row;
};
$output = theme('table', $header, $rows);
$form['around']['markup']['#markup']=$output;
return $form['around'];
}
?>
спасибо за отзывчивость, но у меня еще проблема заключается в том, что когда прописываю функцию вот так
function val_t_setting($form, &$form_state)
то появляется ошибка:
warning: Missing argument 2 for val_t_setting()
Поэтому у меня функция выглядит вот так:
function val_t_setting($form_state)
Может в этом вся и проблема?...Хотя вызов происходит вот так:
$items['admin/ostd/val_t'] = array(
'title' => 'Подгруппа Тлюстена В.Ш.',
'position' => 'right',
'weight' => -5,
'page callback' => 'drupal_get_form',
'page arguments' => array('val_t_setting'),
'access arguments' => array('administer site configuration'),
'access callback' => true,
);
Это элемент с чекбоксами для редактирования нод,а вообще табличные формы негибкое решение.
http://drupalace.ru/lesson/perezagruzka-form-na-ajax-v-drupal-7
Можно и без аякса,опять рендерим форму и добавляем таблицу
if(!empty($form_state['temporary'])) {
$form['results'] = array(
'#type' => 'item',
'#markup' => $form_state['temporary'],
);
}
return $form;
}
function myMod_submit($form_id, &$form_state) {
$results = callSomeFunctionToGetResults();
$form_state['temporary'] = $results;
$form_state['rebuild'] = TRUE;
}