2011-01-17 4 views
1

Мне нужно иметь опцию на моей странице поиска, которая позволит пользователям выбирать количество результатов, которые они хотят отобразить в представлении, т.е. 25 результатов, 50, 100 результатов на страницу. Мой theme_pager кодизменить количество результатов на страницу в представлениях drupal

function theme_pager($tags = array(), $limit = 10, $element = 0, $parameters = array(), $quantity = 9) { 
    global $pager_page_array, $pager_total; 
    $tags = array("", "< prev", "", "next >", ""); 

    // 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 + (1 - $i); 
    $i = 1; 
    } 
    // End of generation loop preparation. 
    $view = views_get_current_view(); 

    // ensure view exists 
    if (!$view) return; 

    // set object property to return total rows 
    $view->get_total_rows = true; 



    // set display_id 
    $view->set_display($display_id); 

    // execute view 
    $view->execute(); 

    // acquire data from views object and $_REQUEST  
    $itemsPerPage = $view->pager['items_per_page']; 
    $currentPage = $_REQUEST['page']+1; 
    $total = $view->total_rows; 

    // start calculation  
    $start = ($itemsPerPage * $currentPage) - ($itemsPerPage-1); 
    $end = $itemsPerPage * $currentPage; 

    if ($end>$total) $end = $total; 

    // return html 
    $x = "<b>Displaying $start - $end of $total</b>"; 
    $li_previous = theme('pager_previous', (isset($tags[1]) ? $tags[1] : t('‹ previous')), $limit, $element, 1, $parameters); 
    $li_next = theme('pager_next', (isset($tags[3]) ? $tags[3] : t('next ›')), $limit, $element, 1, $parameters); 

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


     $items[] = array(
     'class' => 'pager-previous', 
     'data' => $li_previous, 
    ); 
    } 

    // When there is more than one page, create the pager list. 
    if ($i != $pager_max) { 
     // Now generate the actual pager piece. 
     for (; $i <= $pager_last && $i <= $pager_max; $i++) { 
     if ($i < $pager_current) { 
        if ($pager_first > 1 && $i == $pager_first) { 
               $output = '...'.$i; 
               $stopPreEllipsis = true; 
           } else { 
               $output = $i; 
           } 
      $items[] = array(
      'class' => 'pager-item', 
      'data' => theme('pager_previous', $output, $limit, $element, ($pager_current - $i), $parameters), 
     ); 
     } 
     if ($i == $pager_current) { 

      $items[] = array(
      'class' => 'pager-current', 
      'data' => $i, 
     ); 
     } 
     if ($i > $pager_current) { 

        if ($pager_last < $pager_max && $i == $pager_last) { 
               $output = $i.'...'; 
           } else { 
               $output = $i; 
           } 

      $items[] = array(
      'class' => 'pager-item', 
      'data' => theme('pager_next', $output, $limit, $element, ($i - $pager_current), $parameters), 
     ); 

     } 
     } 
    } 
    // End generation. 
    if ($li_next) { 
     $items[] = array(
     'class' => 'pager-next', 
     'data' => $li_next, 
    ); 
    } 
    return theme('item_list', $items, NULL, 'ul', array('class' => 'pager')); 
    } 
} 

ответ

1

Как вы могли заметить, theme_pager не вызывает базу данных, она просто представляет элементы из базы данных. Он даже не отображает элементы в списке, который вызывается.

Поэтому вам необходимо переопределить сумму до ее передачи в pager_query(). С мнениями я понятия не имею. В пользовательском модуле это было бы очень просто: зачитайте параметр url или POSTED-переменную и передайте это как второй параметр в pager_query(). Я подозреваю, что представления имеют некоторый крючок, чтобы переопределить количество за страницу во время выполнения, как раз перед тем, как он будет передан строителю запросов. Но из-за плохой документации взглядов это нелегко найти.

Смежные вопросы