Changeset 8103 for branches/crazyhorse/wp-admin/includes/template.php
- Timestamp:
- 06/16/2008 09:08:49 PM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/crazyhorse/wp-admin/includes/template.php
r7956 r8103 5 5 // 6 6 7 // Dandy new recursive multiple category stuff. 8 function cat_rows( $parent = 0, $level = 0, $categories = 0 ) { 9 if ( !$categories ) { 7 // Ugly recursive category stuff. 8 function cat_rows( $parent = 0, $level = 0, $categories = 0, $page = 1, $per_page = 20 ) { 9 $count = 0; 10 _cat_rows($categories, $count, $parent, $level, $page, $per_page); 11 } 12 13 function _cat_rows( $categories, &$count, $parent = 0, $level = 0, $page = 1, $per_page = 20 ) { 14 if ( empty($categories) ) { 10 15 $args = array('hide_empty' => 0); 11 16 if ( !empty($_GET['s']) ) … … 14 19 } 15 20 21 if ( !$categories ) 22 return false; 23 16 24 $children = _get_term_hierarchy('category'); 17 25 18 if ( $categories ) { 19 ob_start(); 20 foreach ( $categories as $category ) { 21 if ( $category->parent == $parent) { 22 echo "\t" . _cat_row( $category, $level ); 23 if ( isset($children[$category->term_id]) ) 24 cat_rows( $category->term_id, $level +1, $categories ); 26 $start = ($page - 1) * $per_page; 27 $end = $start + $per_page; 28 $i = -1; 29 ob_start(); 30 foreach ( $categories as $category ) { 31 if ( $count >= $end ) 32 break; 33 34 $i++; 35 36 if ( $category->parent != $parent ) 37 continue; 38 39 // If the page starts in a subtree, print the parents. 40 if ( $count == $start && $category->parent > 0 ) { 41 $my_parents = array(); 42 $my_parent = $category->parent; 43 while ( $my_parent) { 44 $my_parent = get_category($my_parent); 45 $my_parents[] = $my_parent; 46 if ( !$my_parent->parent ) 47 break; 48 $my_parent = $my_parent->parent; 25 49 } 26 } 27 $output = ob_get_contents(); 28 ob_end_clean(); 29 30 $output = apply_filters('cat_rows', $output); 31 32 echo $output; 33 } else { 34 return false; 35 } 50 $num_parents = count($my_parents); 51 while( $my_parent = array_pop($my_parents) ) { 52 echo "\t" . _cat_row( $my_parent, $level - $num_parents ); 53 $num_parents--; 54 } 55 } 56 57 if ( $count >= $start ) 58 echo "\t" . _cat_row( $category, $level ); 59 60 unset($categories[$i]); // Prune the working set 61 $count++; 62 63 if ( isset($children[$category->term_id]) ) 64 _cat_rows( $categories, $count, $category->term_id, $level + 1, $page, $per_page ); 65 66 } 67 68 $output = ob_get_contents(); 69 ob_end_clean(); 70 71 $output = apply_filters('cat_rows', $output); 72 73 echo $output; 36 74 } 37 75 … … 361 399 * otherwise, display the row and its children in subsequent rows 362 400 */ 363 function display_page_row( $page, &$children_pages,$level = 0 ) {401 function display_page_row( $page, $level = 0 ) { 364 402 global $post; 365 403 static $class; … … 485 523 486 524 <?php 487 488 if ( ! $children_pages )489 return true;490 491 for ( $i = 0; $i < count($children_pages); $i++ ) {492 493 $child = $children_pages[$i];494 495 if ( $child->post_parent == $id ) {496 array_splice($children_pages, $i, 1);497 display_page_row($child, $children_pages, $level+1);498 $i = -1; //as numeric keys in $children_pages are not preserved after splice499 }500 }501 525 } 502 526 … … 504 528 * displays pages in hierarchical order 505 529 */ 506 function page_rows( $pages ) { 507 if ( ! $pages ) 530 531 function page_rows($pages, $pagenum = 1, $per_page = 20) { 532 $level = 0; 533 534 if ( ! $pages ) { 508 535 $pages = get_pages( array('sort_column' => 'menu_order') ); 509 536 510 if ( ! $pages ) 511 return false; 537 if ( ! $pages ) 538 return false; 539 } 512 540 513 541 // splice pages into two parts: those without parent and those with parent 514 515 542 $top_level_pages = array(); 516 543 $children_pages = array(); 517 544 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; 518 568 foreach ( $pages as $page ) { 519 520 // catch and repair bad pages 521 if ( $page->post_parent == $page->ID ) { 522 $page->post_parent = 0; 523 $wpdb->query( $wpdb->prepare("UPDATE $wpdb->posts SET post_parent = '0' WHERE ID = %d", $page->ID) ); 524 clean_page_cache( $page->ID ); 525 } 526 527 if ( 0 == $page->post_parent ) 528 $top_level_pages[] = $page; 529 else 530 $children_pages[] = $page; 531 } 532 533 foreach ( $top_level_pages as $page ) 534 display_page_row($page, $children_pages, 0); 535 536 /* 537 * display the remaining children_pages which are orphans 538 * having orphan requires parental attention 539 */ 540 if ( count($children_pages) > 0 ) { 541 $empty_array = array(); 542 foreach ( $children_pages as $orphan_page ) { 543 clean_page_cache( $orphan_page->ID); 544 display_page_row( $orphan_page, $empty_array, 0 ); 545 } 546 } 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 584 function _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 } 547 623 } 548 624
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)