Как улучшить пейджер (ссылка "показать все")

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

Аватар пользователя pavantar pavantar 13 мая 2011 в 15:17

Помогите плз.

Как добавить ссылку в педжинге "показать все"?
т.е. обычно пейджер разбивает на страницы и имеет вид:
< первая 2 3 4 5 6 следующая> последняя>>

так хочется сделать
< первая 2 3 4 5 6 следующая> последняя>> <ПОКАЗАТЬ ВСЕ>

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

Так думаю что-то добавить в theme_pager ( http://api.drupal.ru/api/function/theme_pager/6 )
только вот что?

или может как-то по нажатии на ссылку менять количество материалов на странице во views?

Комментарии

Аватар пользователя the_gaintsev the_gaintsev 13 мая 2011 в 20:09

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

Аватар пользователя pavantar pavantar 16 мая 2011 в 12:49

да,вроде то. Вот только куда это вставлять?
<?php
$items[] = array(
'class' => 'pager-all',
'data' => l(t('Show all'), $_GET['q'], array('query' => array('page' => 'full'))),
);
?>

Пробовал вставить в /includes/pager.inc (чего делать нельзя) - ссылка появилясь, но не работает. Наверное views не подхватывает.
А вот как переопределить theme_pager в template.php я не знаю.
Помогите пожалуйста...

Аватар пользователя alezu alezu 15 декабря 2011 в 10:33

После долгих экспериментов вставил после:

    if ($li_last) {
      $items[] = array(
        'class' => array('pager-last'),
        'data' => $li_last,
      );
    }

Следующий код:

 $items[] = array(
        'class' => array('pager-all'),
        'data' =>  l(t('Show All'), $_GET['q'], array('query' => array('items_per_page' => 'All'))),
      );

Вроде все работает. На другие ссылки пейджера тоже никак отрицательно не повлияло.

Аватар пользователя xxandeadxx xxandeadxx 11 августа 2011 в 21:54
<?php
/**
 * Implements hook_views_pre_execute().
 */
function modulename_views_pre_execute(&$view) {
    if (
$view->name == 'your-view-name' && $view->current_display == 'your-display-name' && isset($_GET['page']) && $_GET['page'] == 'full') {
        
$view->pager['use_pager'] = false;
        
$view->pager['items_per_page'] = 0;
    }
}
?>
Аватар пользователя liveflow liveflow 27 сентября 2011 в 10:30

А как переключить пейджер для Drupal 7 во Views 3, подскажите пожалуйста. По 6му в сети есть несколько вариантов, а для семерки - увы.

Попробовал разные варианты, ничего не срабатывает )) :

<?php
function mymodule_views_pre_execute(&$view) {
  
$full = (isset($_GET['page']) && $_GET['page'] == 'full')? 0;
  if (
$full) switch($view->name) {
    case 
'news_view':
    case 
'taxonomy_term':
      switch(
$view->current_display) {
        case 
'page':
             
// 1
            
$view->query->pager->options['items_per_page'] = 0;
             
// 2
            
$view->display['page']->display_options['pager']['options']['items_per_page'] = '0';  
             
// 3
            
$view->items_per_page '0';

           

// 4
           
$id $view->current_display;
           
$handler = &$view->display[$id]->handler;
           
$handler->set_option('use_pager'FALSE);
           
$handler->set_option('items_per_page'0);
        
           
// 5
           
$handler->display->display_options['pager']['type'] = 'none';

        break;
       }
   }
}

?>
Аватар пользователя bee-alex bee-alex 9 января 2012 в 15:10

Здравствуйте. У меня такая же задачка. Переопределил в tamplate.php theme_pager и вставил код:
$items[] = array(
'class' => array('pager-all'),
'data' => l(t('Show All'), $_GET['q'], array('query' => array('items_per_page' => 'All'))),
);
Но ссылка не работает. В чем может быть проблема? Куда копать? Возможно есть другой способ?

Аватар пользователя moneron moneron 25 апреля 2014 в 18:14

Для 7ки

<?php 
function modulename_views_pre_execute(&$view) {
    if (
$view->name == 'name' && $view->current_display == 'page' && isset($_GET['page']) && $_GET['page'] == 'full') {
        
$view->init_pager();
        
$view->set_items_per_page('0');
    }
}
?>