WordPress.org

Make WordPress Core

Changeset 8089


Ignore:
Timestamp:
06/15/08 00:45:01 (6 years ago)
Author:
ryan
Message:

Add paging to Manage->Pages. see #6561

Location:
trunk/wp-admin
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-admin/edit-pages.php

    r7998 r8089  
    118118 
    119119<div class="tablenav"> 
     120 
     121<?php 
     122$pagenum = absint( $_GET['pagenum'] ); 
     123if ( empty($pagenum) ) 
     124    $pagenum = 1; 
     125if( !$per_page || $pre_page < 0 ) 
     126    $per_page = 20; 
     127 
     128$num_pages = ceil(count($posts) / $per_page); 
     129$page_links = paginate_links( array( 
     130    'base' => add_query_arg( 'pagenum', '%#%' ), 
     131    'format' => '', 
     132    'total' => $num_pages, 
     133    'current' => $pagenum 
     134)); 
     135 
     136if ( $page_links ) 
     137    echo "<div class='tablenav-pages'>$page_links</div>"; 
     138?> 
    120139 
    121140<div class="alignleft"> 
     
    152171  </thead> 
    153172  <tbody> 
    154   <?php page_rows($posts); ?> 
     173  <?php page_rows($posts, $pagenum, $per_page); ?> 
    155174  </tbody> 
    156175</table> 
     
    170189 
    171190<div class="tablenav"> 
     191<?php 
     192if ( $page_links ) 
     193    echo "<div class='tablenav-pages'>$page_links</div>"; 
     194?> 
    172195<br class="clear" /> 
    173196</div> 
  • trunk/wp-admin/includes/template.php

    r8086 r8089  
    399399 * otherwise, display the row and its children in subsequent rows 
    400400 */ 
    401 function display_page_row( $page, &$children_pages, $level = 0 ) { 
     401function display_page_row( $page, $level = 0 ) { 
    402402    global $post; 
    403403    static $class; 
     
    523523 
    524524<?php 
    525  
    526     if ( ! $children_pages ) 
    527         return true; 
    528  
    529     for ( $i = 0; $i < count($children_pages); $i++ ) { 
    530  
    531         $child = $children_pages[$i]; 
    532  
    533         if ( $child->post_parent == $id ) { 
    534             array_splice($children_pages, $i, 1); 
    535             display_page_row($child, $children_pages, $level+1); 
    536             $i = -1; //as numeric keys in $children_pages are not preserved after splice 
    537         } 
    538     } 
    539525} 
    540526 
     
    542528 * displays pages in hierarchical order 
    543529 */ 
    544 function page_rows( $pages ) { 
    545     if ( ! $pages ) 
     530 
     531function page_rows($pages, $pagenum = 1, $per_page = 20) { 
     532    $level = 0; 
     533 
     534    if ( ! $pages ) { 
    546535        $pages = get_pages( array('sort_column' => 'menu_order') ); 
    547536 
    548     if ( ! $pages ) 
    549         return false; 
     537        if ( ! $pages ) 
     538            return false; 
     539    } 
    550540 
    551541    // splice pages into two parts: those without parent and those with parent 
    552  
    553542    $top_level_pages = array(); 
    554543    $children_pages  = array(); 
    555544 
     545    // If searching, ignore hierarchy and treat everything as top level, otherwise split 
     546    // into top level and children 
     547    if ( empty($_GET['s']) )  { 
     548        foreach ( $pages as $page ) { 
     549            // catch and repair bad pages 
     550            if ( $page->post_parent == $page->ID ) { 
     551                $page->post_parent = 0; 
     552                $wpdb->query( $wpdb->prepare("UPDATE $wpdb->posts SET post_parent = '0' WHERE ID = %d", $page->ID) ); 
     553                clean_page_cache( $page->ID ); 
     554            } 
     555     
     556            if ( 0 == $page->post_parent ) 
     557                $top_level_pages[] = $page; 
     558            else 
     559                $children_pages[] = $page; 
     560        } 
     561 
     562        $pages = &$top_level_pages; 
     563    } 
     564 
     565    $count = 0; 
     566    $start = ($pagenum - 1) * $per_page; 
     567    $end = $start + $per_page; 
    556568    foreach ( $pages as $page ) { 
    557  
    558         // catch and repair bad pages 
    559         if ( $page->post_parent == $page->ID ) { 
    560             $page->post_parent = 0; 
    561             $wpdb->query( $wpdb->prepare("UPDATE $wpdb->posts SET post_parent = '0' WHERE ID = %d", $page->ID) ); 
    562             clean_page_cache( $page->ID ); 
    563         } 
    564  
    565         if ( 0 == $page->post_parent ) 
    566             $top_level_pages[] = $page; 
    567         else 
    568             $children_pages[] = $page; 
    569     } 
    570  
    571     foreach ( $top_level_pages as $page ) 
    572         display_page_row($page, $children_pages, 0); 
    573  
    574     /* 
    575      * display the remaining children_pages which are orphans 
    576      * having orphan requires parental attention 
    577      */ 
    578      if ( count($children_pages) > 0 ) { 
    579         $empty_array = array(); 
    580         foreach ( $children_pages as $orphan_page ) { 
    581             clean_page_cache( $orphan_page->ID); 
    582             display_page_row( $orphan_page, $empty_array, 0 ); 
    583         } 
    584      } 
     569        if ( $count >= $end ) 
     570            break; 
     571 
     572        $i++; 
     573 
     574        if ( $count >= $start ) 
     575            echo "\t" . display_page_row( $page, $level ); 
     576 
     577        $count++; 
     578 
     579        if ( isset($children_pages) ) 
     580            _page_rows( $children_pages, $count, $page->ID, $level + 1, $pagenum, $per_page ); 
     581    } 
     582} 
     583 
     584function _page_rows( $pages, &$count, $parent, $level, $pagenum, $per_page ) { 
     585    $start = ($pagenum - 1) * $per_page; 
     586    $end = $start + $per_page; 
     587    $i = -1; 
     588    foreach ( $pages as $page ) { 
     589        if ( $count >= $end ) 
     590            break; 
     591 
     592        $i++; 
     593 
     594        if ( $page->post_parent != $parent ) 
     595            continue; 
     596 
     597        // If the page starts in a subtree, print the parents. 
     598        if ( $count == $start && $page->post_parent > 0 ) { 
     599            $my_parents = array(); 
     600            $my_parent = $page->post_parent; 
     601            while ( $my_parent) { 
     602                $my_parent = get_post($my_parent); 
     603                $my_parents[] = $my_parent; 
     604                if ( !$my_parent->post_parent ) 
     605                    break; 
     606                $my_parent = $my_parent->post_parent; 
     607            } 
     608            $num_parents = count($my_parents); 
     609            while( $my_parent = array_pop($my_parents) ) { 
     610                echo "\t" . display_page_row( $my_parent, $level - $num_parents ); 
     611                $num_parents--; 
     612            } 
     613        } 
     614 
     615        if ( $count >= $start ) 
     616            echo "\t" . display_page_row( $page, $level ); 
     617 
     618        unset($pages[$i]); // Prune the working set      
     619        $count++; 
     620 
     621        _page_rows( $pages, $count, $page->ID, $level + 1, $pagenum, $per_page ); 
     622    } 
    585623} 
    586624 
Note: See TracChangeset for help on using the changeset viewer.