2013-10-05 3 views
0

Не уверен, что кто-то может помочь в этом, но попробовал различные вещи и, похоже, не в состоянии его решить. После поиска довольно бит и не найдя ничего, мне удалось разместить грубое временное исправление в месте, но это работает в обходном пути и не является идеальным.Feed Pagination PHP Logic

Я пытаюсь отобразить вывод фида и иметь пример кода, который отображает результатов.

Пример кода довольно много работает и отображает страницы, как это должно, но есть две проблемы:

1) Если установить количество элементов на странице, чтобы быть в качестве примера 10 - если фида 10 или меньше предметов, тогда он ничего не отображает. Если в фиде есть , например пять элементов в фиде, мне нужно будет установить число результатов на страницу до 4, чтобы создать две страницы, а затем отобразится . Если я установил его для отображения 5 или 10, ничего не будет показано.

2) Это может быть связано с вышеуказанным, но если в элементе есть 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

В коде есть пара ошибок.

Первый вы просто показываете страницы, если у вас есть больше каналов, чем необходимо для одной страницы! Если вы 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

Извините за задержку ответить - потребовалось некоторое время, чтобы получить правильное заявление. Большое спасибо за то, что нашли время ответить - первый был отсортирован сразу, а второй вопрос был в нескольких местах, но ваш ответ был прав, и я тоже изменил его в этих местах. Ваша помощь была очень оценена! – onelove

+0

Да, не проблема, кажется, проще найти такие ошибки в коде других, я думаю. – mjb4