Как можно вывести несколько пейджеров для одного views?

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

Комментарии

Аватар пользователя shevgeny shevgeny 3 октября 2015 в 12:09

тоже интересует, вообще странно, что этим так редко интересуются, я уже всё голову сломал. Удалось как-нибудь решить?

Аватар пользователя shevgeny shevgeny 3 октября 2015 в 14:02

dashiwa wrote:
А нужно ли? Видел ваш вопрос на орге..Может если нужно можно как подмодуль запилить

ну если это нужно мне, это нужно еще кому-то, и это применяется на многих сайтах, до думаю, ваш вопрос имеет конкретный, четкий, обоснованный и вполне логичный ответ. Следовательно, смысла спрашивать нет, если вам есть что сказать по сути, мы все вам будем благодарны.

Аватар пользователя dashiwa dashiwa 3 октября 2015 в 14:16

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

"shevgeny" wrote:
Следовательно, смысла спрашивать нет
- Если нет денег - то нужно постараться убедить людей заняться проблемой

Аватар пользователя shevgeny shevgeny 3 октября 2015 в 14:18

dashiwa wrote:
Ну может кто найдется, кто ради вас запилит модуль,за так..Или ради четкого обоснованного ответа..
"shevgeny" wrote:
Следовательно, смысла спрашивать нет
- Если нет денег - то нужно постараться убедить людей заняться проблемой

1) Кто-то сказал вам, что денег нет?
2) Если вы хотите денег, то вам как минимум в другой раздел.
3) Если есть предложения, предлагайте конкретно: сколько, когда, на каких условиях.

Аватар пользователя Hek Hek 3 октября 2015 в 15:43

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

Аватар пользователя shevgeny shevgeny 3 октября 2015 в 22:26

Hek wrote:
Решить не удалось. 2 пейджера в принципе выводил - дублировал пейджер, но переопределял вывод с помощью theme_pager. Но в таком варианте они совместно работать отказывались - контент тоже либо дублировался (если пейджер с аякс) либо сбрасывались настройки пейджера (без аякса). В итоге оставил обычный пейджер и добавил в фильтрах "Показать по ... на странице".

А не помните, как переопределяли пейджер? Может кодик остался где-нибудь в закромах? Smile Может вместе покрутим да и чего-нибудь накрутим? Тема, думаю, многим может быть полезна. Я могу попробовать привлечь кого-нибудь из своих ребят.

Аватар пользователя Orion76 Orion76 3 октября 2015 в 17:40

В настройках пейджера вьюса есть поле "ID постраничного навигатора"
По умолчанию там 0
Для разных пейджеров на одной странице это поле должно иметь разные значения(0,1,2,3 и т.п.)

Тогда пейджеры должны работать..

Аватар пользователя shevgeny shevgeny 3 октября 2015 в 22:44

orion76 wrote:
В настройках пейджера вьюса есть поле "ID постраничного навигатора"
По умолчанию там 0
Для разных пейджеров на одной странице это поле должно иметь разные значения(0,1,2,3 и т.п.)

Тогда пейджеры должны работать..


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

Аватар пользователя dashiwa dashiwa 3 октября 2015 в 19:37

"shevgeny" wrote:
2) Если вы хотите денег, то вам как минимум в другой раздел.
3) Если есть предложения, предлагайте конкретно: сколько, когда, на каких условиях.

Я в том смысле,что вам нужно учиться просить,а не командовать командирским тоном.
Таких топиков - быстро все решайте мою задачу а потом я отблагодарю своим молчанием , тут много,и никто не изменится.
Я иногда ковыряю некоторые интересные задачи просто так

Аватар пользователя shevgeny shevgeny 3 октября 2015 в 22:32

dashiwa wrote:
Я в том смысле,что вам нужно учиться просить,а не командовать командирским тоном.
Таких топиков - быстро все решайте мою задачу а потом я отблагодарю своим молчанием , тут много,и никто не изменится.
Я иногда ковыряю некоторые интересные задачи просто так

У вас, сэр, паранойя Smile
Конкретно вам и конкретно в этом топике никто ничего не приказывал. И даже не просил Wink Вас спрашивали. Нет — увы, да — супер. Только и всего.

Аватар пользователя Hek Hek 4 октября 2015 в 15:44

"shevgeny" wrote:
А не помните, как переопределяли пейджер? Может кодик остался где-нибудь в закромах? Smile Может вместе покрутим да и чего-нибудь накрутим? Тема, думаю, многим может быть полезна. Я могу попробовать привлечь кого-нибудь из своих ребят.

К сожалению ничего не осталось. Проект сдал, а потом еще много чего было.

Аватар пользователя Orion76 Orion76 4 октября 2015 в 18:06

"shevgeny" wrote:
что это для избавления от конфликтов при показе нескольких представлений на одной странице

Нет, это параметр "element" для theme_pager (https://api.drupal.org/api/drupal/includes!pager.inc/function/theme_pager/7)
-----
element: An optional integer to distinguish between multiple pagers on one page.
------

Аватар пользователя shevgeny shevgeny 4 октября 2015 в 19:55

orion76 wrote:
"shevgeny" wrote:
что это для избавления от конфликтов при показе нескольких представлений на одной странице

Нет, это параметр "element" для theme_pager (https://api.drupal.org/api/drupal/includes!pager.inc/function/theme_pager/7)
-----
element: An optional integer to distinguish between multiple pagers on one page.
------

Ага, спасибо. Но что-то я не догоняю. Не работает. У меня переопределенный пейджер не появляется, его нужно дополнительно выводить?

Код в темлейте:

<?php
/*
 * theme_pager();
 */

function nidbincity_pager($variables) {
  
$tags $variables['tags'];
  
$element $variables['element'];
  
$parameters $variables['parameters'];
  
$quantity $variables['quantity'];
  global 
$pager_page_array$pager_total$theme;

  

// Calculate various markers within this pager piece:
  // Middle is used to "center" pages around the current page.
  
$pager_middle ceil($quantity 2);
  
// current is the page we are currently paged to
  
$pager_current $pager_page_array[$element] + 1;
  
// first is the first page listed by this pager piece (re quantity)
  
$pager_first $pager_current $pager_middle 1;
  
// last is the last page listed by this pager piece (re quantity)
  
$pager_last $pager_current $quantity $pager_middle;
  
// max is the maximum page number
  
$pager_max $pager_total[$element];
  
// End of marker calculations.

  // Prepare for generation loop.
  

$i $pager_first;
  if (
$pager_last $pager_max) {
    
// Adjust "center" if at end of query.
    
$i $i + ($pager_max $pager_last);
    
$pager_last $pager_max;
  }
  if (
$i <= 0) {
    
// Adjust "center" if at start of query.
    
$pager_last $pager_last + ($i);
    
$i 1;
  }
  
// End of generation loop preparation.

  

$li_previous theme('pager_previous', array('text' => (isset($tags[1]) ? '←' NULL), 'element' => $element'interval' => 1'parameters' => $parameters));
  
$li_next theme('pager_next', array('text' => (isset($tags[3]) ? '→' NULL), 'element' => $element'interval' => 1'parameters' => $parameters));

  

$li_first theme('pager_first', array('text' => 1'element' => $element'parameters' => $parameters));
  
$li_last theme('pager_last', array('text' => $pager_max'element' => $element'parameters' => $parameters));

  

// First-page link display condition
  
$show_first = ($i 1) ? true false;

  if (

$pager_total[$element] > 1) {
    if (
$li_previous) {
      
$items[] = array(
        
'class' => array('pager-previous'),
        
'data' => $li_previous,
      );
    }

    if (

$show_first && $li_first) {
      
$items[] = array(
        
'class' => array('pager-first'),
        
'data' => $li_first,
      );
    }

    

// When there is more than one page, create the pager list.
    
if ($i != $pager_max) {
      if (
$i 2) {
        
$items[] = array(
          
'class' => array('pager-ellipsis'),
          
'data' => '…',
        );
      }
      
// Now generate the actual pager piece.
      
for (; $i <= $pager_last && $i <= $pager_max$i++) {
        if (
$i $pager_current) {
          
$items[] = array(
            
'class' => array('pager-item'),
            
'data' => theme('pager_previous', array('text' => $i'element' => $element'interval' => ($pager_current $i), 'parameters' => $parameters)),
          );
        }
        if (
$i == $pager_current) {
          
$items[] = array(
            
'class' => array('pager-current'),
            
'data' => '<span>' $i '</span>',
          );
        }
        if (
$i $pager_current) {
          
$items[] = array(
            
'class' => array('pager-item'),
            
'data' => theme('pager_next', array('text' => $i'element' => $element'interval' => ($i $pager_current), 'parameters' => $parameters)),
          );
        }
      }
      if (
$i $pager_max) {
        
$items[] = array(
          
'class' => array('pager-ellipsis'),
          
'data' => '…',
        );
      }
    }

    

// Last-page link display condition
    
$show_last = ($pager_max > ($i-1)) ? true false;

    

// End generation.
    
if ($show_last && $li_last) {
      
$items[] = array(
        
'class' => 'pager-last',
        
'data' => $li_last,
      );
    }

    if (

$li_next) {
      
$items[] = array(
        
'class' => array('pager-next'),
        
'data' => $li_next,
      );
    }
    return 
'<h2 class="element-invisible">' t('Pages') . '</h2>' theme('item_list', array(
      
'items' => $items,
      
'attributes' => array('class' => array('pager')),
    ));
  }
}

/*
 * theme_pager_previous()
 */

function nidbincity_pager_previous($variables) {
  
$text $variables['text'];
  
$element $variables['element'];
  
$interval $variables['interval'];
  
$parameters $variables['parameters'];
  global 
$pager_page_array;
  
$output '';

  

// If we are anywhere but the first page
  
if ($pager_page_array[$element] > 0) {
    
$page_new pager_load_array($pager_page_array[$element] - $interval$element$pager_page_array);

    

// If the previous page is the first page, mark the link as such.
    
if ($page_new[$element] == 0) {
      
$output theme('pager_first', array('text' => $text'element' => $element'parameters' => $parameters));
    }
    
// The previous page is not the first page.
    
else {
      
$output theme('pager_link', array('text' => $text'page_new' => $page_new'element' => $element'parameters' => $parameters));
    }
  } elseif (
$pager_page_array[$element] == 0) {
    
$output theme('pager_link', array('text' => $text'element' => $element'parameters' => $parameters));
  }
  return 
$output;
}

/*
 * theme_pager_next()
 */

function nidbincity_pager_next($variables) {
  
$text $variables['text'];
  
$element $variables['element'];
  
$interval $variables['interval'];
  
$parameters $variables['parameters'];
  global 
$pager_page_array$pager_total;
  
$output '';

  

// If we are anywhere but the last page
  
if ($pager_page_array[$element] < ($pager_total[$element] - 1)) {
    
$page_new pager_load_array($pager_page_array[$element] + $interval$element$pager_page_array);
    
// If the next page is the last page, mark the link as such.
    
if ($page_new[$element] == ($pager_total[$element] - 1)) {
      
$output theme('pager_last', array('text' => $text'element' => $element'parameters' => $parameters));
    }
    
// The next page is not the last page.
    
else {
      
$output theme('pager_link', array('text' => $text'page_new' => $page_new'element' => $element'parameters' => $parameters));
    }
  } elseif (
$pager_page_array[$element] == $pager_total[$element] - 1) {
    
$output theme('pager_link', array('text' => $text'element' => $element'parameters' => $parameters));
  }

  return 

$output;
}
?>

<?php$element = $variables['element'];?> менял на <?php$element = $variables[1];?>
менял ID "0" во views на разные значения — ничего.

Сам пейджер выводится в шаблоне views через стандартный

  <?php if ($pager): ?>
    <?php print $pager?>
  <?php endif; ?>

Что я делаю не так?