Переход на Drupal7

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

Аватар пользователя AndreyL AndreyL 23 июля 2012 в 13:22

Помогите переписать запрос sql, самому, наверное, не справиться: ни опыта, ни знаний достаточно пока не имею....
На drupal6 было так:

$if1 = '';
$if2 = '';
if(!($node = menu_get_object()))
return;
  $count_per_page = 10;
  $sql = "SELECT Col1, Col2, Col3, Col4 FROM Tab1 WHERE Col5='%s'".$if1.$if2." ORDER BY Col1";
  $sql_count = "SELECT COUNT(*) FROM Tab1 WHERE Col5='%s'".$if1.$if2;
  $result = pager_query($sql,$count_per_page, 0, $sql_count, $node->title);
  $rows = array();
  while($row = db_fetch_object($result)){
  $header = array('Первый', 'Второй', 'Третий', 'Четвертый');
    $rows[] = array($row->Col1, $row->Col2, $row->Col3, $row->Col4);
  }
  $output = theme('table', $header, $rows, array());
  $output .= theme('pager', NULL, $count_per_page, 0);
  print "<br />";
  print $output;

Пытаюсь перевести на drupal7. Что-то не получается:

$title = db_query("SELECT title FROM {node} WHERE nid = :nid", array(':nid' => $nid))->fetchField();
if(!($node = menu_get_object()))
return;
  $list = db_query("SELECT Col1, Col2, Col3, Col4 from {Tab1} where Col5=:$title ORDER BY Col1", array(':$title' => $node->title));
    $nameA = array();
    $nameB = array();
    $nameC = array();
    $nameD = array();
  foreach($list as $row){
  $header = array('Страницы раздела');
    $nameA[] = $row->Col1;
    $nameB[] = $row->Col2;
    $nameC[] = $row->Col3;
    $nameD[] = $row->Col4;
  }
print_r($list->fetchObject());

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

if(!($node = menu_get_object()))
return;
  $list = db_query("SELECT Col1, Col2, Col3, Col4 from {Tab1} where Col5='Белок' ORDER BY Col1");
    $nameA = array();
    $nameB = array();
    $nameC = array();
    $nameD = array();
  foreach($list as $row){
  $header = array('Страницы раздела');
    $nameA[] = $row->Col1;
    $nameB[] = $row->Col2;
    $nameC[] = $row->Col3;
    $nameD[] = $row->Col4;
  }
print_r($list->fetchObject());

В общем, нужна Ваша помощь. И совсем непонятно: как прицепить старый output? (с темой и пейджером)

Комментарии

Аватар пользователя AndreyL AndreyL 23 июля 2012 в 13:46

не, она не белая, а "пустая", т.е. меню, блоки - все есть. а данных (текста, который должен пользователю показываться) нет.

Аватар пользователя AndreyL AndreyL 23 июля 2012 в 15:49
<?php
$title 
db_query("SELECT title FROM {node} WHERE nid = :nid", array(':nid' => '$nid'))->fetchField();
print 
$title;
?>

ничего не выдает...
или не должен?

Аватар пользователя AndreyL AndreyL 23 июля 2012 в 16:06

у меня изначально были только фрагменты кода, которые мне помогли на этом форуме когда-то воедино собрать.
сейчас я не намного больше понимаю в зависимостях; "что, как и куда";
запрос, вроде, в состоянии составить; по крайней мере в 6-ке он работает.
а как его выполнить в 7-ке и настроить на "стандартный вывод" таблицей (с сортировкой, оформлением) - не знаю...

Принцип такой: по названию страницы должно идти сравнение со столбцом одной таблицы, из которой (по этому столбцу тянутся другие данные).
Например, страница называется "Камаз", тогда из таблицы должны браться значения тех строк, в которых в столбце №3 (например) ячейка = "Камаз". Ну, и оформляться как обычная друпаловская таблица.
М.б. и по-другому как-то можно сделать. Мне просто кажется, что старый код не так уж и плох, вот и пытаюсь с ним что-то сделать.

Аватар пользователя Chyvakoff Chyvakoff 23 июля 2012 в 16:14

http://php-include.ru/stati/data-base-api В конце статьи последний блок оформленного кода,там 'PagerDefault' есть,погляди..
Потом функцией theme можешь в таблицу собрать..попробую поискать код полностью..где то был.

Аватар пользователя AndreyL AndreyL 23 июля 2012 в 18:19
$q=db_select('Tab','t')->extend('PagerDefault');
$q->condition('Name','Белок','=');
$q->fields('t',array('Name','SurName','LastName'));
$q->orderBy('t.SurName','asc');
$q->addExpression('count(*)','LastName');
$result=$q->limit(20)->execute();
$rows=array();
while($record=$result->fetchAssoc()){
        $rows[]=array(
                array('data'=>$record['Name']),
                array('data'=>$record['SurName']),
                array('data'=>$record['LastName']),
        );
}

Где-то ошибка или чего-то в коде не хватает. Не отображается ничего. Без пейджера выдается только 1 значение.

Все, без пейджера все получилось!!!

Аватар пользователя AndreyL AndreyL 23 июля 2012 в 18:57

О, ну да! я думал, что по execute выводится... СПАСИБО!
пейджер все-таки не появился. пока всего 1 значение....

$q=db_select('Tab','t')->extend('PagerDefault');
$q->condition('Name','Белок','=');
$q->fields('t',array('Name','SurName','LastName'));
$q->orderBy('t.SurName','asc');
$q->addExpression('count(*)','LastName');
$result=$q->limit(20)->execute();
$rows=array();

while($record=$result->fetchAssoc()){

        $rows[]=array(
                array('data'=>$record['Name']),
                array('data'=>$record['SurName']),
                array('data'=>$record['LastName']),
        );

}
$headers =  array('Раздел','Название','Цена');
return theme('table', array('header' => $headers, 'rows' => $rows));
$output .= theme('pager');

Надо еще title (заголовок ноды) вместо "Белок" поставить.

$title = db_query("SELECT title FROM {node} WHERE nid = :nid", array(':nid' => $nid))->fetchField();

Как это используется???

Аватар пользователя AndreyL AndreyL 23 июля 2012 в 20:15
<?php
$if = 'Белок';
$lim='20';
$q=db_select('Tab','t')->extend('PagerDefault')->limit($lim);
$q->condition('Name',$if ,'=');
$q->fields('t',array('Name','SurName','LastName'));
$q->orderBy('t.SurName','asc');
$result=$q->execute();
$rows=array();
while($record=$result->fetchAssoc()){
 $headers =  array('Раздел','Название','Цена');
        $rows[]=array(
                array('data'=>$record['Name']),
                array('data'=>$record['SurName']),
                array('data'=>$record['LastName']),
        );
}
return theme('table', array('header' => $headers, 'rows' => $rows));
?>

Выводится только то количество строк, которое указано в $lim
Пейджера добиться не удается....
Нужна поддержка...

Аватар пользователя AndreyL AndreyL 24 июля 2012 в 6:39

$q->extend('TableSort');
Почему-то не работает. Хотя, я, признаться, и не знаю еще как должен работать...
Вроде, по образцу написал, а эффекта нет пока...