2013-10-05 81 views
0

不確定somone是否可以幫助,但已嘗試過各種東西 ,似乎無法解決它。在搜索了相當多的 位後,沒有找到任何東西,我設法在 的地方設置了一個粗略的臨時修復程序,但是這種方法迂迴工作,並不理想。飼料分頁PHP邏輯

我想顯示一個飼料的輸出,並有示例代碼,分頁 的結果。

的示例代碼非常作品和顯示頁面,因爲它應該,但 這裏有兩個問題:

1)如果我設置每頁的項目數是作爲一個例子10 - 如果 飼料有10個或更少的項目,然後它不顯示任何東西。如果有 例如Feed中的五個項目,那麼我需要將每頁的 結果數設置爲4,以便它會創建兩個頁面,然後顯示 。如果我將它設置爲顯示5或10,則不顯示任何內容。

2)這可能與上面相關,但如果 Feed中有100個項目,並且我將每頁的項目數設置爲10,那麼它應該創建 10頁。實際發生的是它創建了11 - 第11頁是 空白。

下面是來自例子全額代碼(長度道歉):

<html> 
<?php 
$itemsPerPage = 10; 
$numItems = '~~~NumberOfFeedItems~~~'; 

$onePage = 1; 
$startNumber = 0; 
if ($numItems > $itemsPerPage) { 
    $onePage = 0; 
    // Check for requested starting position 
    if (isset($_REQUEST['ItemNumber'])) { 
    $startNumber = $_REQUEST['ItemNumber']; 
    } 

    // Validate starting position 
    if ($startNumber > $numItems) { 
    $startNumber = 0; 
    } 
} 

$pageString = ''; 
// Create the list of pages, if needed 
if ($onePage == 0) { 
    $Qparts = Array(); 
    $parts = explode('&', $_SERVER['QUERY_STRING']); 
    if (count($parts) > 0) { 
    foreach ($parts as $value) { 
     if (substr($value, 0, 10) != 'ItemNumber') { 
     $Qparts[] = $value; 
     } 
    } 
    if (count($Qparts) == 0) { 
     $Qstring = ''; 
    } 
    elseif (count($Qparts) == 1) { 
     $Qstring = $Qparts[0].'&amp;'; 
    } else { 
     $Qstring = implode('&amp;', $Qparts).'&amp;'; 
    } 
    } 

    // 
    // Previous Page 
    $pageString = '<strong>'; 
    if ($startNumber > 0) { 
    $newStartIndex = $startNumber - $itemsPerPage; 
    if ($newStartIndex < 0) { 
     $newStartIndex = 0; 
    } 
    $pageString .= '<a href="'.$_SERVER['PHP_SELF'].'?'.$Qstring.'ItemNumber='.$newStartIndex.'">Previous</a>&nbsp;&nbsp;&nbsp;&nbsp;'; 
    } 

    // 
    // The jump to page markers 
    if ($numItems > $itemsPerPage) { 
    $tempPages = (int)(($numItems/$itemsPerPage) + 1); 
    $x = 1; 
    if ($tempPages > 12) { 
     // There are too many pages to fit across 
     if ((($startNumber+1)/10) > 7) { 
     $pageString .= '...&nbsp;&nbsp;&nbsp;&nbsp;'; 
     $x = 1 + (int)(($startNumber+1)/10) - 6; 
     } 
    } 

    for ($y = 0; $x <= $tempPages; $x++, $y++) { 
     $tempStart = ($itemsPerPage * ($x - 1)); 
     if (($tempStart <= $startNumber) && ($startNumber < ($tempStart + $itemsPerPage))) { 
     $pageString .= $x.'&nbsp;&nbsp;&nbsp;&nbsp;'; 
     } else { 
     $pageString .= '<a href="'.$_SERVER['PHP_SELF'].'?'.$Qstring.'ItemNumber='.$tempStart.'">'.$x.'</a>&nbsp;&nbsp;&nbsp;&nbsp;'; 
     } 
     if ($y >= 12) { 
     $pageString .= '...&nbsp;&nbsp;&nbsp;&nbsp;'; 
     break; 
     } 
    } 
    } 

    // 
    // Next Page 
    if ($startNumber + $itemsPerPage <= $numItems) { 
    $pageString .= '<a href="'.$_SERVER['PHP_SELF'].'?'.$Qstring.'ItemNumber='.($startNumber + $itemsPerPage).'">Next</a>'; 
    } 
    $pageString .= '</strong>'; 
} 

?> 
    <head> 
    <meta http-equiv="content-type" content="text/html;charset=utf-8"> 
    <title>~~~FeedTitle~~~</title> 
    </head> 
    <body> 
    <h1>~~~FeedTitle~~~</h1> 
    <p>~~~FeedDescription~~~</p> 
    <hr> 
<?php 
echo $pageString."<br />\n"; 
$x = 0; 
?> 
    <table width="100%"> 
     ~~~BeginItemsRecord~~~ 
<?php 
if ($onePage == 0) { 
    if (($startNumber <= $x) && ($x < $startNumber+$itemsPerPage)) { 
?> 
     <tr><td>~~~ItemPubShortDate~~~ ~~~ItemPubShortTime~~~</td></tr> 
     <tr><td><a href="~~~ItemLink~~~">~~~ItemTitle~~~</a></td></tr> 
     <tr><td>~~~ItemDescription~~~</td></tr> 
     <tr><td><hr></td></tr> 
<?php 
    } 
    $x++; 
} 
?> 
     ~~~EndItemsRecord~~~ 
    </table> 
<?php 
echo $pageString."<br />\n"; 
?> 
    </body> 
</html> 

我知道這是很困難的,通過上述編碼量的外觀和發現任何 所以這是一個有點我知道的很遠。

在此先感謝您提供的任何幫助。

回答

1

代碼中有幾處錯誤。

如果您的Feed超出一頁所需的數量,您將只顯示第一頁! 如果您lmore比1頁您的安全$onePage = 0但最終你只是在這種情況下,沒有其他輸出:

<?php 
if ($onePage == 0) { 
    if (($startNumber <= $x) && ($x < $startNumber+$itemsPerPage)) { 
?> 
     <tr><td>~~~ItemPubShortDate~~~ ~~~ItemPubShortTime~~~</td></tr> 
     <tr><td><a href="~~~ItemLink~~~">~~~ItemTitle~~~</a></td></tr> 
     <tr><td>~~~ItemDescription~~~</td></tr> 
     <tr><td><hr></td></tr> 
<?php 
    } 
    $x++; 
} 
// Here the else is missing! 
?> 

你的第二個問題,即在100個項目的情況下,將創建11個頁面連接到這個:

// Next Page 
if($startNumber + $itemsPerPage <= $numItems) { 
    $pageString .= '<a href="'.$_SERVER['PHP_SELF'].'?'.$Qstring.'ItemNumber='.($startNumber + $itemsPerPage).'">Next</a>'; 
} 

如果您有100個項目每頁10個供稿,並顯示第10頁!你是$startNumber是90,因此你從0開始索引。所以$startNumber + $itemsPerPage正好是100,所以它的確切數量的飼料$numItems這也是100.

因此,用<替換<=

+0

對不起延遲迴復 - 花了一點時間纔得到else語句的權利。非常感謝您花時間回覆 - 第一個問題是直接排序,第二個問題是在幾個地方,但您的答案是正確的,我也在這些地方進行了更改。非常感謝您的幫助! – onelove

+0

是的沒問題,似乎很容易在其他人的代碼中發現這些類型的錯誤。 – mjb4