Разбор sql запросы с пейджинацией

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

Аватар пользователя demarko demarko 25 сентября 2015 в 22:54

Здравствуйте, уважаемые друпаловоды!

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

<?phpfunction get_comments($nid) {
  
  $query = db_select('comment','c');
    
  $query->leftjoin('field_data_comment_body', 'cb', 'cb.entity_id = c.cid');
  $query->leftjoin('field_data_field__rate_fsfield', 'hr', 'hr.entity_id = c.cid');
  //$query->leftjoin('field_data_field_phone_textfield', 'tif', 'tif.entity_id = n.nid');
    
  $query->condition('c.nid', $nid,'='); 
  $query->condition('c.status', 1,'=');
    
  $query->fields('c', array('cid', 'created', 'name'));
  $query->fields('cb', array('comment_body_value'));
  $query->fields('hr', array('field_rate_fsfield_rating'));
  
  $result = $query->extend('PagerDefault')
    ->limit(5)
    ->execute();

  $output = NULL;

  foreach ($result as $record) {

    $output .= '<div class="comment whitebox">
      <div class="autor content-title">'.$record->name.'</div>
      <div class="two-line"></div>
      <div class="body">'.check_markup($record->comment_body_value, 'filtered_html').'</div>
      <div class="fs-rating"><div class="title">Оценка:</div> '.get_fs_votes($record->field_rate_fsfield_rating).'</div>
    </div>';
  
  }

  $output .= theme('pager');
  
  return $output;

}?>

Так то инфу выводит и пейджинатор в конце но игнорирует переменную и он не работает

Комментарии

Аватар пользователя demarko demarko 26 сентября 2015 в 14:14

voviko wrote:
$output .= theme('pager', NULL, ЛИМИТ, 0);

Выводит вот это

Fatal error: Unsupported operand types in /home/xxx/data/www/xxx/includes/theme.inc on line 1088

Ставлю такую строку $output .= theme('pager', NULL, 5, 0);

Аватар пользователя Nikit Nikit 27 сентября 2015 в 4:19

"demarko" wrote:
$output .= theme('pager', NULL, ЛИМИТ, 0);
это к др6.
Пробуйте: $output .= theme('pager', array('tags' => array(), 'element' => 10)); возможно на странице присутствует другой пейджинатор...

Аватар пользователя demarko demarko 28 сентября 2015 в 22:52

Пейджинатор на это странице один единственный.

Данный код вообще ничего не выводит Sad

Странно как-то вообще происходит

Аватар пользователя demarko demarko 1 октября 2015 в 0:40

Nikit wrote:
пробуйте

$output .= 'начало пейджера:' . theme('pager', array('tags' => array(), 'element' => 10)) . ':конец пейджера';

между ними есть что в html?

Вот вся функция которая выводит данные

function get_comments($nid) {
 
  $query = db_select('comment','c');
   
  $query->leftjoin('field_data_comment_body', 'cb', 'cb.entity_id = c.cid');
  $query->leftjoin('field_data_field_xxx_rate_fsfield', 'hr', 'hr.entity_id = c.cid');
   
  $query->condition('c.nid', $nid,'=');
  $query->condition('c.status', 1,'=');
   
  $query->fields('c', array('cid', 'created', 'name'));
  $query->fields('cb', array('comment_body_value'));
  $query->fields('hr', array('field_xxx_rate_fsfield_rating'));
   
  $query->orderBy('c.created', 'ASC');

  $result = $query->extend('PagerDefault')->limit(5)->execute();

  $output = NULL;

  foreach ($result as $record) {

    $output .= '<div class="comment whitebox">
      <div class="autor content-title">'
.$record->name.'</div>
      <div class="two-line"></div>
      <div class="body">'
.check_markup($record->comment_body_value, 'filtered_html').'</div>
      <div class="fs-rating"><div class="title">Оценка:</div> '
.get_fs_votes($record->field_xxx_rate_fsfield_rating).'</div>
    </div>'
;
 
  }

  $output .= theme('pager', array('limit', 5));
 
  return $output;

}

данную функцию положил в template.php а не в модуль отдельный, вызываю так же в шаблонах, а не в модулях.

Аватар пользователя Nikit Nikit 6 октября 2015 в 8:10

надо было сохранить "политически" правильно, ну да ладно.
Там я вижу вот такой код:

<ul class="pager"><li class="pager-current first">1</li>
<li class="pager-item"><a title="ааА бб‚б€аАаНаИб†бƒ аНаОаМаЕб€ 2" href="/hotel/orenburg?page=1">2</a></li>
<li class="pager-next"><a title="ааА баЛаЕаДбƒбŽб‰бƒбŽ бб‚б€аАаНаИб†бƒ" href="/hotel/orenburg?page=1">баЛаЕаДбƒбŽб‰аАб т€К</a></li>
<li class="pager-last last"><a title="ааА аПаОбаЛаЕаДаНбŽбŽ бб‚б€аАаНаИб†бƒ" href="/hotel/orenburg?page=1">аПаОбаЛаЕаДаНбб ТЛ</a></li>
</ul></div>

Это и есть пейджер, теперь проверь через css видимость этого кода...

Аватар пользователя demarko demarko 11 октября 2015 в 22:20

Nikit wrote:
надо было сохранить "политически" правильно, ну да ладно.
Там я вижу вот такой код:

<ul class="pager"><li class="pager-current first">1</li>
<li class="pager-item"><a title="ааА бб‚б€аАаНаИб†бƒ аНаОаМаЕб€ 2" href="/hotel/orenburg?page=1">2</a></li>
<li class="pager-next"><a title="ааА баЛаЕаДбƒбŽб‰бƒбŽ бб‚б€аАаНаИб†бƒ" href="/hotel/orenburg?page=1">баЛаЕаДбƒбŽб‰аАб т€К</a></li>
<li class="pager-last last"><a title="ааА аПаОбаЛаЕаДаНбŽбŽ бб‚б€аАаНаИб†бƒ" href="/hotel/orenburg?page=1">аПаОбаЛаЕаДаНбб ТЛ</a></li>
</ul></div>

Это и есть пейджер, теперь проверь через css видимость этого кода...

В css то он виден и на странице, вся проблема в sql похоже и и подключении пейджера к запросу, всю голову сломал, так то правильно по примерам вроде.

Аватар пользователя demarko demarko 12 октября 2015 в 21:46

Nikit wrote:
я не понял проблему, пейджер виден или нет? Если виден, то не работает?

Да виден, но не работает. Поэтому я привел как пример всю функцию с sql.

Аватар пользователя Nikit Nikit 13 октября 2015 в 1:41

то есть пейджер виден, но когда жмешь на 1 2 3 - происходит пересылка на эту страницу, но там те же данные?

Аватар пользователя demarko demarko 13 октября 2015 в 22:52

Nikit wrote:
то есть пейджер виден, но когда жмешь на 1 2 3 - происходит пересылка на эту страницу, но там те же данные?

Да именно так

Аватар пользователя Niklan Niklan 12 октября 2015 в 8:44

theme_pager()

<?php
$per_page 
10;
// Initialize the pager
$current_page pager_default_initialize(count($rows), $per_page);
// Split your list into page sized chunks
$chunks array_chunk($rows$per_pageTRUE);
// Show the appropriate items from the list
$output theme('table', array('header' => $header'rows' => $chunks[$current_page]));
// Show the pager
$output .= theme('pager', array('quantity',count($rows)));
?>
Аватар пользователя demarko demarko 12 октября 2015 в 21:47

Niklan wrote:
theme_pager()

<?php
$per_page 
10;
// Initialize the pager
$current_page pager_default_initialize(count($rows), $per_page);
// Split your list into page sized chunks
$chunks array_chunk($rows$per_pageTRUE);
// Show the appropriate items from the list
$output theme('table', array('header' => $header'rows' => $chunks[$current_page]));
// Show the pager
$output .= theme('pager', array('quantity',count($rows)));
?>

А зачем <?php$output = theme('table', array('header' => $header, 'rows' => $chunks[$current_page]));?> ???
Мне нужен вывод просто html

Аватар пользователя voviko voviko 12 октября 2015 в 23:17

"demarko" wrote:
А зачем <?php$output = theme('table', array('header' => $header, 'rows' => $chunks[$current_page]));?> ???
Мне нужен вывод просто html


rows = "ХТЫМЫЭль"

Аватар пользователя demarko demarko 13 октября 2015 в 22:53

Niklan wrote:
"demarko" wrote:

Это пример, никто не заставляет выводить таблицей.

Да, я видел эти примеры и свой код тоже делал по примеру, но не работает почему-то. Например пейджер созданный на views страницах работает и на страницах модулей ядра тоже.

Аватар пользователя Niklan Niklan 14 октября 2015 в 7:06

У вас это не единственный пейджер на странице? Если да, то надо пейджеру сменить идентификатор. Такая опция есть у вьюсов, в коде смотрите у theme_pager() на вот это:

"theme_pager()" wrote:

element: An optional integer to distinguish between multiple pagers on one page.