Помогите переписать запрос 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;
$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=:$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());
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? (с темой и пейджером)
Комментарии
Когда видишь белую страницу - принято читать серверные логи
не, она не белая, а "пустая", т.е. меню, блоки - все есть. а данных (текста, который должен пользователю показываться) нет.
Заюзайте апишки семерки для работы с базой.
А может return надо писать вместо print? Незнаю просто где у вас этот код расположен..и под 6`ку оч мало писал.
<?php
$title = db_query("SELECT title FROM {node} WHERE nid = :nid", array(':nid' => '$nid'))->fetchField();
print $title;
?>
ничего не выдает...
или не должен?
у меня изначально были только фрагменты кода, которые мне помогли на этом форуме когда-то воедино собрать.
сейчас я не намного больше понимаю в зависимостях; "что, как и куда";
запрос, вроде, в состоянии составить; по крайней мере в 6-ке он работает.
а как его выполнить в 7-ке и настроить на "стандартный вывод" таблицей (с сортировкой, оформлением) - не знаю...
Принцип такой: по названию страницы должно идти сравнение со столбцом одной таблицы, из которой (по этому столбцу тянутся другие данные).
Например, страница называется "Камаз", тогда из таблицы должны браться значения тех строк, в которых в столбце №3 (например) ячейка = "Камаз". Ну, и оформляться как обычная друпаловская таблица.
М.б. и по-другому как-то можно сделать. Мне просто кажется, что старый код не так уж и плох, вот и пытаюсь с ним что-то сделать.
Продолжайте, продолжайте. Узнаем ещё деталей.
Раз уж таблицей, то db_select(), а не db_query()
из первого поста видно, что таблица выводилась.
детали постом выше описал
http://php-include.ru/stati/data-base-api В конце статьи последний блок оформленного кода,там 'PagerDefault' есть,погляди..
Потом функцией theme можешь в таблицу собрать..попробую поискать код полностью..где то был.
спасибо. ставлю опыты)
$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 значение.
Все, без пейджера все получилось!!!
Ну так а рендер где сам то
к примеру так
Да и хедер таблицы желательно заполнить.
О, ну да! я думал, что по execute выводится... СПАСИБО!
пейджер все-таки не появился. пока всего 1 значение....
$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 (заголовок ноды) вместо "Белок" поставить.
Как это используется???
Все значения вывести не получается, пейджера нет.
Что не так? Подскажите...
$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
Пейджера добиться не удается....
Нужна поддержка...
print theme('pager');
Работает с этим:)))
В этом случае = кстати писать необязательно))
А $q->condition('t.Name',$if ,'='); не пробовали?
Да, спасибо! Так и сделал.
$q->extend('TableSort');
Почему-то не работает. Хотя, я, признаться, и не знаю еще как должен работать...
Вроде, по образцу написал, а эффекта нет пока...
->orderByHeader($header)
Не работает... что нужно для того, чтобы код срабатывал?