Вывод таблицы на странице с формой

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

Аватар пользователя Виктория Виктория 18 октября 2015 в 23:03

Здравствуйте! Подскажите пожалуйста, как вывести таблицу на странице с формой, но ниже формы. Сейчас выводится так, как на скрине. Вывод происходит вот так:
$output = theme('table', $header, $rows);
print $output;

ВложениеРазмер
Иконка изображения snimok.png94.53 КБ

Комментарии

Аватар пользователя dashiwa dashiwa 19 октября 2015 в 22:06

Лучше подробно напишите что вам нужно делать,возможно вы пробуете это неправильным путем сделать.

Аватар пользователя Виктория Виктория 19 октября 2015 в 22:20

Вот на всякий случай код:

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;

}

Аватар пользователя Виктория Виктория 19 октября 2015 в 23:09

есть список с возможностью выбора группы. я выбираю группу, нажимаю "загрузить" и появляется таблица с именами и баллами. но проблема в том,что она появляется не после формы, а вверху страницы, под админкой, то есть даже не на странице с формой

Аватар пользователя Orion76 Orion76 19 октября 2015 в 23:51

Плохо помню шестерку, если это не поможет:

<?php
//Устанавливаем ВЕС для элемента формы, чем больше - тем ниже, сотни должно хватить-)
$form['nodes'][#weight]=100;
?>

Тогда надо будет свою темизацию писать для формы.
описать ее в hook_theme
объявить в $form['#theme']='имя_темы'

Аватар пользователя ASomeoneD ASomeoneD 20 октября 2015 в 10:35

Если таблицу сделать элементом формы то будет все хорошо (таблица будет в самой форме и вывести ее можно будет в форме куда угодно).
не совсем коде понятно что такое элемент формы '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;
$ballsdb_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'];
}
?>
Аватар пользователя Виктория Виктория 20 октября 2015 в 20:52

спасибо за отзывчивость, но у меня еще проблема заключается в том, что когда прописываю функцию вот так

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,
);

Аватар пользователя dashiwa dashiwa 20 октября 2015 в 12:41

"ASomeoneD" wrote:
не совсем коде понятно что такое элемент формы 'nodes' у типа 'tableselect' вроде как нет '#rows'

Это элемент с чекбоксами для редактирования нод,а вообще табличные формы негибкое решение.

"Виктория" wrote:
я выбираю группу, нажимаю "загрузить" и появляется таблица

http://drupalace.ru/lesson/perezagruzka-form-na-ajax-v-drupal-7

Можно и без аякса,опять рендерим форму и добавляем таблицу

  function myMod_form($form, &$form_state) {
     
     
     
        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;
     
     
     }