2011-01-17 5 views
1

Ich muss eine Option auf meiner Suchseite haben, die den Benutzern die Anzahl der Ergebnisse, die sie in der Ansicht angezeigt werden soll, dh 25 Ergebnisse, 50, 100 Ergebnisse haben pro Seite. Mein theme_pager Code istÄndern Sie die Anzahl der Ergebnisse pro Seite in Drupal Ansichten

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')); 
    } 
} 

Antwort

1

Wie Sie vielleicht bemerkt haben, ist theme_pager die Datenbank nicht nennen, lediglich stellt die Elemente aus der Datenbank. Die Elemente in der Liste werden nicht einmal gerendert.

Sie müssen daher die Menge überschreiben, bevor sie in pager_query() übergeben wird. Mit Ansichten habe ich keine Ahnung. In einem benutzerdefinierten Modul wäre das sehr einfach: Lies einen URL-Parameter oder eine POSTed-Variable und gebe diesen als zweiten Parameter an pager_query() weiter. Ich vermute, dass Aufrufe einen Haken haben, um den Betrag pro Seite in Laufzeit zu überschreiben, kurz bevor es an den Abfrage-Builder übergeben wird. Aber aufgrund der schlechten Dokumentation der Ansichten ist es nicht leicht zu finden.

Verwandte Themen