Нужно передать заголовок текущей ноды в запрос

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

Аватар пользователя AndreyL AndreyL 28 апреля 2010 в 4:21

Задача, наверное, не сложная, но я не имею вообще никакого опыта в составлении запросов к БД.
Вот, "накрутил" такой:

<?php
    $q = "SELECT name, id FROM `services`";
    $result = mysql_query($q);
    print "<table>\n";
    while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
        print "\t<tr>\n";
        foreach ($line AS $col_value) {
            print "\t\t<td>$col_value</td>\n";
        }
        print "\t</tr>\n";
    }
    print "</table>\n";
    mysql_free_result($result);
    mysql_close($link);

?>

Конечно, не сам, в подавляющей части, а "поиском" по drupal.ru.
Запрос надо изменить так, чтобы определялось какие name и id будут выводиться:
должны отображаться только те, название которых совпадает с названием страницы (ноды).
Пока отображаются, конечно, все.
Заголовок страницы (ноды) я понял как получить:

<?phpif ( arg(0) == 'node' && is_numeric(arg(1)) && ! arg(2) ) {
  $node = node_load(arg(1));
  $title = $node->title;
  print "<h4>$title</h4>";?>

но не знаю как его дальше использовать: как ни пытался - запрос выдает пустой результат.

Комментарии

Аватар пользователя AndreyL AndreyL 29 апреля 2010 в 1:24

Еще один вопрос.
Насколько быстро этот запрос будет работать?
Например, если поиск будет идти по таблице, содержащей несколько десятков тысяч записей; будет ли сильно нагружать сервер вывод, скажем, 100 строк?

Аватар пользователя Dan Dan 29 апреля 2010 в 11:21

Ваш код должен быть полностью переписан.

  if(!($node = menu_get_object()))
    return;

  $result = db_query("SELECT name, id FROM {services} WHERE name='%s'", $node->title);
  $rows = array();
  while($row = db_fetch_object($result)){
    $rows[] = array($row->id, $row->name);
  }

  $header = array('Id', 'Name');
  if(!count($rows)){
    $rows[] = array(array('data' => 'No result', 'colspan' => count($header)));
  }

  print theme('table', $header, $rows, array(), $node->title);

Аватар пользователя goodboy goodboy 29 апреля 2010 в 11:44

Dan, расскажите пожалуйста, в чем преимущества использования menu_get_object() вместо node_load(arg(1)) . Я в Drupal6 продолжаю использовать node_load (как и в пятой версии).

Аватар пользователя AndreyL AndreyL 12 мая 2010 в 14:02

Еще один вопрос возник: надо сделать "фильтр" по клику - записей много, может потребоваться увидеть только часть.
Вот, например:
1 - стол - рик - 5 рублей
2 - стол - мебельсити - 10 рублей
3 - стол - мебель - 20 рублей

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

т.е. так: клик по "мебельсити":

2 - стол - мебельсити - 10 рублей.

P.S. сайт-то сам, конечно, не про мебель. просто, дабы не смущать мед. терминами - написал так. Идея, конечно, та же.

В процессе поиска решения нашел такой пример:


<?php
$dblocation 
"localhost";   // Имя сервера
$dbuser     "root";        // Имя пользователя
$dbpswrd    "";            // Пароль
$dbname     "catalog";     // Имя базы данных

// Соединение с сервером базы данных

$dblink mysql_connect$dblocation$dbuser$dbpswrd );
mysql_query'SET NAMES cp1251' );
// Выбираем базу данных
mysql_select_db$dbname$dblink );

// По умолчанию сортировка по наименованию, по возрастанию
$orderby 'title';
$sort 'ASC';
if ( isset( 
$_GET['orderby'] ) and isset( $_GET['sort'] ) ) {
  if ( 
in_array$_GET['orderby'], array( 'code''title''price' ) ) ) $orderby $_GET['orderby'];
  if ( 
in_array$_GET['sort'], array( 'ASC''DESC' ) ) ) $sort $_GET['sort'];
}

$query 'SELECT code, title, description, price
          FROM products
          ORDER BY '
.$orderby.' '.$sort;
$res mysql_query$query );
echo 
'<h1>Каталог продукции</h1>'."\n";
// Выводим "шапку" таблицы
echo '<table border="1" cellpadding="4" cellspacing="0" style="border-collapse: collapse; empty-cells: show">'."\n";
echo 
'<tr>';
if ( 
$sort == 'ASC' ) {
  
$tmp 'DESC';
  
$image 'down.gif';
} else {
  
$tmp 'ASC';
  
$image 'up.gif';
}
if ( 
$orderby == 'code' )
  echo 
'<th><a href="'.$_SERVER['PHP_SELF'].'?orderby=code&sort='.$tmp.'">Код</a>&nbsp;<img src="'.$image.'" alt="" /></th>';
else
  echo 
'<th><a href="'.$_SERVER['PHP_SELF'].'?orderby=code&sort=ASC">Код</a></th>';
if ( 
$orderby == 'title' )
  echo 
'<th><a href="'.$_SERVER['PHP_SELF'].'?orderby=title&sort='.$tmp.'">Наименование</a>&nbsp;<img src="'.$image.'" alt="" /></th>';
else
  echo 
'<th><a href="'.$_SERVER['PHP_SELF'].'?orderby=title&sort=ASC">Наименование</a></th>';
echo 
'<th>Описание</th>';
if ( 
$orderby == 'price' )
  echo 
'<th><a href="'.$_SERVER['PHP_SELF'].'?orderby=price&sort='.$tmp.'">Цена</a>&nbsp;<img src="'.$image.'" alt="" /></th>';
else
  echo 
'<th><a href="'.$_SERVER['PHP_SELF'].'?orderby=price&sort=ASC">Цена</a></th>';
echo 
'</tr>'."\n";
while( 
$prd mysql_fetch_array$res ) ) {
  echo 
'<tr>';
  echo 
'<td>'.$prd['code'].'</td>'."\n";
  echo 
'<td>'.$prd['title'].'</td>'."\n";
  echo 
'<td>'.$prd['description'].'</td>'."\n";
  echo 
'<td>'.$prd['price'].'</td>'."\n";   
  echo 
'</tr>'."\n";
}
echo 
'</table>'."\n";
?>

решил "встроить" его в тот, что был предложен Вами, Dan... но что-то криво пошло: отображается "белая страница"; хотя, до момента "клика по названию" я еще не дошел, но тормоз уже тут. Вроде, как тут (по умолчанию) должны выводиться все записи, а получается "пусто", т.е. отсутствие записей (сама страница отображается, но так, как будто данные просто отсутствуют):


<?php
 
print $body;
  if(!(
$node menu_get_object()))
    return;

$where 'Firm = 0';
if(isset(
$_GET['where']){
  if(
in_array($_GET['where'], array(Firm)))
$where $_GET['where'];
}
 
  
$result db_query("SELECT CAT, Firm, NUM FROM MEBEL where Name='%s' ORDER BY Firm"$node->title);

$res mysql_query$result );

echo 

'<h1>Каталог продукции</h1>'."\n";
// Выводим "шапку" таблицы
echo '<table border="1" cellpadding="4" cellspacing="0" style="border-collapse: collapse; empty-cells: show">'."\n";
echo 
'<tr>';
if ( 
$sort == 'ASC' ) {
  
$tmp 'DESC';
} else {
  
$tmp 'ASC';
}
if ( 
$where == 'Firm' )
  echo 
'<th><a href="'.$_SERVER['PHP_SELF'].'?where=Firm='.$tmp.'">Код</a></th>';
else
  echo 
'<th><a href="'.$_SERVER['PHP_SELF'].'?where=Firm=ASC">Код</a></th>';
echo 
'</tr>'."\n";
while( 
$prd mysql_fetch_array$res ) ) {
  echo 
'<tr>';
  echo 
'<td>'.$prd['CAT'].'</td>'."\n";
  echo 
'<td>'.$prd['Firm'].'</td>'."\n";
  echo 
'<td>'.$prd['NUM'].'</td>'."\n";  
  echo 
'</tr>'."\n";
}
echo 
'</table>'."\n";
?>

В общем, что-то неправильно сделал...

Пока у меня сохраняется такой вывод (предложенный Вами):


<?php
 
print $body;
  if(!(
$node menu_get_object()))
    return;
 
  
$result db_query("SELECT CAT, Firm, NUM FROM MEBEL where Name='%s' ORDER BY Firm"$node->title);
  
$rows = array();
  while(
$row db_fetch_object($result)){
  
$header = array('Название по прайсу''Мед. компания''Цена услуги');
    
$rows[] = array($row->CAT$row->Firm$row->NUM);
  }
 

 

// if(!count($rows)){
  //  $rows[] = array(array('data' => 'Нет данных', 'colspan' => count($header)));
  
// }
  
print theme('table'$header$rows, array());
?>