2013-10-16 17 views
0

我想做一個簡單的博客。在頁面內容的底部,我放置了分頁,其中顯示了指向下一個和上一個博客條目的鏈接,博客標題位於我從名爲「pages」的數據庫表中獲得的鏈接「menu_name」列中。 我首先做一個查詢並創建通過所謂的「博客」之類的功能的陣列,然後設置一些變量這樣做:如何引用下一個和上一個數組值?

$sql = "SELECT * FROM pages "; 
$sql .= "ORDER BY id DESC "; 
$pages = Blog::find_by_sql($sql); 
$blog_page = reset($pages); 
$page_id = Blog::find_by_id(isset($_GET['page']) ? $_GET['page'] : $blog_page->id); 

然後,我做出了代號爲以前的博客鏈接如下:

public function pagination_previous(){ 
    global $address; //$address = "list_blogs.php?page="; 
    global $page_id; 
    global $pagination; //a class for storing functions that handle pagination 
    global $pages; 
    if($pagination->has_next_page()){ 
     echo "\n  <a class=\"olderblog\" href=" . $address; 
     echo $pagination->next_page(); 
     echo " title=\"Newer Blog\">&laquo; "; 
     foreach($pages as $page => $value){ 
      if($page_id->id + 1 == $value->id){ 
       echo $value->menu_name; 
      } 
     }; 
     echo "</a> "; 
    }else{ 
     echo ""; 
    } 
} 

這是函數has_next_page()

public function has_previous_page(){ 
    return $this->previous_page() >= 1 ? true : false; 
} 

,這是previous_page():

public function previous_page(){ 
    global $blog; 
    return $this->current_page - 1; 
} 

這很好,直到我決定從哪裏刪除博客條目的管理區域。 當我刪除一個帶有id的博客條目時,問題就開始了。讓我們來說一下6.因爲在數據庫表「pages」中沒有更多id = 6的項目,所以前後頁面上的下一頁或上一頁的鏈接缺少的頁面是空的,但仍指向頁面= 6,因爲has_previous_page()從$ current_page中減去1。 我中途想出一個辦法擺脫這種混亂通過設置數量Pagination_next()函數是這樣的:

public function pagination_next(){ 
    global $address; 
    global $pagination; 
    global $page_id; 
    global $pages; 
    if($pagination->has_previous_page()){ 
     foreach($pages as $page => $value){ 
      if($page_id->id - 1 == $value->id){ 

       echo "\n  <a class=\"newerblog\" href=" . $address; 
       echo $value->id; 
       echo " title=\"Older Blog\">"; 
       echo $value->menu_name; 
       break; 
      } 

     } 
     echo " &raquo;</a> "; 
    }else{ 
     echo ""; 
    } 
} 

然而,這仍然沒有因爲foreach循環內,如果條件下工作。 我需要在pagination_previous()和pagination_next()中設置這個條件,以引用基於它的數組索引($ page)的下一個和前一個數組項,而不是在id($ value-> id)上,但是我不能爲我的生活弄清楚這一點。這是數組$頁的樣子:

Array 
(
[0] => Blog Object 
    (
     [id] => 8 
     [subject_id] => 2 
     [menu_name] => Aliquam sed interdum 
     [position] => 4 
     [visible] => 1 
     [created] => 
     [content] => 
    Aliquam sed interdum tortor. Vivamus et blandit velit... 

[1] => Blog Object 
    (
     [id] => 7 
     [subject_id] => 2 
     [menu_name] => Vestibulum ante ipsum 
     [position] => 3 
     [visible] => 1 
     [created] => 
     [content] => 
    Vestibulum ante ipsum primis in faucibus orci luctus et ultrices... 

[2] => Blog Object 
    (
     [id] => 5 
     [subject_id] => 2 
     [menu_name] => Praesent massa mi 
     [position] => 2 
     [visible] => 1 
     [created] => 
     [content] => 
    Praesent massa mi, pretium et leo vitae, aliquam... 

[3] => Blog Object 
    (
     [id] => 4 
     [subject_id] => 2 
     [menu_name] => Nam interdum tincidunt 
     [position] => 1 
     [visible] => 1 
     [created] => 
     [content] => 
    Nam interdum tincidunt purus quis lacinia. Aliquam erat volutpat. 
) 

有人能幫助我嗎?

謝謝大家的回答,但不幸的是他們中沒有人幫我解決了我的問題。 用盡了所有選項之後,我肯定地認爲解決這個問題的唯一方法就是弄清楚如何在if條件中引用下一個或前一個現有的$ value-> id,而不用加1或減1進入下一頁,因爲這會導致在數據庫中缺少id時出現空鏈接。 如果有人能解決這個難題,我會永遠感謝那個人。

+0

數組指針? [下一個()](http://us1.php.net/manual/en/function.next.php)和[prev()](http://us1.php.net/manual/en/function.prev .php) –

+0

試過了。不起作用。 –

+0

嘗試我在我的答案中提供的功能。它通過測試數據進行測試併爲我工作。 – Uours

回答

1

你可以把你的previous_page功能的東西沿着這些線路:

public function previous_page() 
{ 
    global $blog; 

    $prev = -1; // Initialize 

    $arrayKeys = array_keys($blog); 

    rsort($arrayKeys); // Sort keys array in reverse order 

    while(list($key ,$cursor) = each($arrayKeys)) 
    { 
     if($cursor == $this->current_page) 
     { 
      if(list($key ,$prev) = each($arrayKeys)) return $prev; 
      break; 
     } 
    } 
    return $prev; 
} 

以下可能會給予更多的理解:

// Test data 

$array = array(0 => 'Obj 0' ,1 => 'Obj 1' ,2 => 'Obj 2' ,3 => 'Obj 3' ,4 => 'Obj 4' ,); 


$current = 3; // Try with any valid key of the array 


// Get the keys into an array 

$arrayKeys = array_keys($array); 

// Search for next 

$next = -1; // Initialize 

sort($arrayKeys); // Sort the keys array 

while(list($key ,$cursor) = each($arrayKeys)) 
{ 
    if($cursor == $current) 
    { 
     if(list($key ,$cursor) = each($arrayKeys)) 
     { 
      $next = $cursor; 
     } 
     break; 
    } 
} 
// Search for previous 

$prev = -1; // Initialize 

rsort($arrayKeys); // Sort keys array in reverse order 

while(list($key ,$cursor) = each($arrayKeys)) 
{ 
    if($cursor == $current) 
    { 
     if(list($key ,$cursor) = each($arrayKeys)) 
     { 
      $prev = $cursor; 
     } 
     break; 
    } 
} 

if($prev <> -1) echo '<br>Prev : ' ,$array[$prev]; 
if($next <> -1) echo '<br>Next : ' ,$array[$next]; 
+0

我做了一個ID數組而不是使用$ arrayKeys,它的工作就像一個魅力。謝謝百萬老兄!這真的幫了我很多。 –

0

我建議使用SQL來獲得一個和下一個博客條目

以前的帖子

select * from pages where id = (select max(id) from pages where id < <current_post_id>) 

下一個職位

select * from pages where id = (select min(id) from pages where id > <current_post_id>) 
0

全功能的選擇可能是有您博客對象上的持續序列索引字段。分頁可以檢查prev/next序列索引。你可以編寫你的函數來盲目地假設它們是真正順序的(並且確保你在刪除帖子時重新編制索引),以便實現簡單的+ 1/-1或者編寫一個函數,找到下一個最高/最低的函數(可能來自db )。這將允許你任意移動它們以及確保存在。從任意對象id解耦順序。

+0

如何找到下一個最高/最低索引?這正是我需要通過的條件,但我無法弄清楚。 –

0

在你的數組的foreach循環之前,使用array_values函數更新你的數組索引,它會重新索引你的數組,所以現在你的邏輯將保持相同並且正常工作。

相關問題