Здравствуйте, подскажите пожалуйста. У меня есть таблица из 8-ми столбцов, 8-ой столбец это ссылка, по нажатию на эту ссылку должен открыться PDF и туда попасть соответствующие данные выбранной строки. Собственно сделал я это вот так: В сессии находятся значения выбранные из базы данных.
<?php
if(isset($_SESSION['table2'])) {
$TempArray = $_SESSION['table2'];
$form['commontable2'] = array(
'#type' => 'container',
'#theme' => 'simple',
);
foreach ($TempArray as $key => $value) {
$form['commontable2'][$key]['date'] = array(
'#markup' => changeDateFormat($TempArray[$key]['date'],"d.m.Y"),
);
$form['commontable2'][$key]['protocol№'] = array(
'#markup' => $TempArray[$key]['protocol№'],
);
$form['commontable2'][$key]['type'] = array(
'#markup' => $TempArray[$key]['type'],
);
$form['commontable2'][$key]['zav№'] = array(
'#markup' => $TempArray[$key]['zav№'],
);
$form['commontable2'][$key]['vladel'] = array(
'#markup' => str_replace(array('/', '\\'), '', $TempArray[$key]['vladel']),
);
$form['commontable2'][$key]['inn'] = array(
'#markup' => $TempArray[$key]['inn'],
);
$form['commontable2'][$key]['num_svidet'] = array(
'#markup' => $TempArray[$key]['num_svidet'],
);
$form['commontable2'][$key]['link'] = array(
'#type' => 'link',
'#title' => t('распечатать протокол'),
'#href' => '/pdfgen',
);
}
}
return $form;
?>
А потом я вывожу таблицу:
<?php
function theme_simple($vars) {
if(isset($_SESSION['table2'])) {
$form = $vars['form'];
$rows = array();
foreach (element_children($form) as $id) {
if (isset($form[$id])) {
$rows[] = array(
'data' => array(
drupal_render($form[$id]['date']),
drupal_render($form[$id]['protocol№']),
drupal_render($form[$id]['type']),
drupal_render($form[$id]['zav№']),
drupal_render($form[$id]['vladel']),
drupal_render($form[$id]['inn']),
drupal_render($form[$id]['num_svidet']),
drupal_render($form[$id]['link']),
),
);
}
}
// Шапка таблицы.
$header = array(
t('Дата'),
t('№ протокола'),
t('Тип'),
t('Зав. №'),
t('Владелец'),
t('ИНН владельца'),
t('Номер свидетельства'),
t('Протокол поверки'),
);
$output = theme('table', array(
'header' => $header,
'rows' => $rows,
'empty' => t('Table is empty', array()),
'attributes' => array('class' => array('commtable1')),
));
$output .= drupal_render_children($form);
unset($_SESSION['table2']);
}
return $output;
}
?>
Моя проблема заключается в том что, мне уже на самой странице /pdfgen (это отдельный модуль) нужно понять какая именно строка была выбрана. У меня есть соответственно id каждой записи. Вот я думаю что нужно как то по нажатию на ссылку в сессию занести ID записи, а в модуле генерации PDF этот ID получить. Пробовал уже делать кнопкой, но кнопка перезагружает страницу, затем пробовал ajax вешать на кнопку. Но тогда к кнопке с помощью #attributes нужно было добавить js что бы страница открывалась 'onclick' => "window.open(/pdfgen')", и приходилось несколько раз нажимать на кнопку, потому что если один раз нажимал, совсем ничего не происходило, потом второй раз и третий, на третий раз открывалась страница. А бывало что и с первого раза. Ну я думаю что это как то ajax влиял.
Подскажите пожалуйста что тут можно сделать, заранее благодарю за ответ.
Комментарии
Передача парметров возможна также через post и get, если jQuery то можно использовать http://api.jquery.com/Ajax_Events/
1. Хранение данных в сессии - явно плохая практика. Максимум - ID'шник.
2. Почему не генерировать ссылку сразу, в последнем столбце?
3. Не забывайте про атрибут "download" для скачивания, а не открытия страницы (вместо огородов с "onclick").
4. Вероятно не правильно добавляли ajax, при "правильном" подходе не нужно ничего дополнительно навешивать. Я бы советовал присмотреться к AJAX-commands.
Всем спасибо