Как передать индификатор выбранной записи на другую страницу?

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

Аватар пользователя shlop shlop 7 января 2018 в 22:14

Здравствуйте, подскажите пожалуйста. У меня есть таблица из 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 влиял.
Подскажите пожалуйста что тут можно сделать, заранее благодарю за ответ.

Комментарии

Аватар пользователя bumble bumble 8 января 2018 в 19:15
1

1. Хранение данных в сессии - явно плохая практика. Максимум - ID'шник.
2. Почему не генерировать ссылку сразу, в последнем столбце?
3. Не забывайте про атрибут "download" для скачивания, а не открытия страницы (вместо огородов с "onclick").
4. Вероятно не правильно добавляли ajax, при "правильном" подходе не нужно ничего дополнительно навешивать. Я бы советовал присмотреться к AJAX-commands.