2013-10-05 3 views
0

somone이 도움을 줄 수 있는지 알지 못하지만 다양한 것을 시도했지만 이니 해결할 수없는 것 같습니다. 비트를 검색하고 아무 것도 발견하지 못했지만 장소에 조잡한 임시 픽스를 넣을 수 있었지만 이상적이지는 않습니다.피드 페이지 매기기 PHP 로직

피드의 결과를 표시하려고하고 결과로 페이지 번호를 매기도록 시도하고 있습니다.

예제 코드 꽤 많은 작품과 표시 페이지는해야하지만 두 가지 문제가 있습니다 : 내가 예를 들어 10로 페이지 당 항목 수를 설정하면

1 참조) - 피드가있는 경우 10 개 이하의 항목은 아무 것도 표시하지 않습니다. 피드에 예를 들어 5 개 항목이있는 경우 두 페이지를 생성 한 후 표시가되도록 페이지 당 결과 수를 4로 설정해야합니다. 5 또는 10을 표시하도록 설정하면 아무 것도 표시되지 않습니다.

2) 이것은 위와 연결할 수 있지만 피드에 100 개의 항목이 있고 페이지 당 항목 수가 10 개로 설정되어 있다면 10 페이지를 만들어야합니다. 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

코드에 몇 가지 실수가 있습니다.

한 페이지에 필요한 것보다 많은 피드가있는 경우 처음으로 페이지를 표시합니다. 당신은 한 페이지보다 lmore 한 경우 $onePage = 0 안전하지만, 결국 당신이 다른없는이 경우 바로 출력 :

100 개 항목의 경우는 11 페이지를 만들 것입니다 귀하의 두 번째 문제는이 연결되어
<?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! 
?> 

:

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

100 개의 항목이 있고 페이지 당 10 개의 피드가 있고 10 번째 페이지가 표시되면! 당신은 $startNumber이고, 0부터 시작하는 인덱스이기 때문에 90입니다. 그래서 $startNumber + $itemsPerPage는 또한 100

그래서 <<=을 대체 피드 $numItems의 그것과 정확히 양이 너무 정확히 100입니다.

+0

답장을 늦게 드려 죄송합니다. else 문을 올바르게 사용하려면 약간의 시간이 걸렸습니다. 답장 시간을내어 주셔서 감사합니다. 첫 번째 문제는 곧바로 해결되었고, 두 번째 문제는 몇 군데에 있었지만 귀하의 답변은 옳았으며 그 곳에서도 변경되었습니다. 당신의 도움은 대단히 감사했습니다! – onelove

+0

그래, 아무 문제 없어, 내가 추측하는 다른 사람들의 코드에서 이런 종류의 오류를 찾는 것이 더 쉬운 것으로 보인다. – mjb4