0

誰かがこれに役立つかどうかはわかりませんが、さまざまなことを試してみましたが、解決できないようです. かなり検索して何も見つからなかった後、大まかな一時的な修正を行うことができましたが、それは回りくどい方法で機能し、理想的ではありません。

フィードの出力を表示しようとしていますが、結果を改ページするサンプル コードがあります。

サンプル コードはほとんど問題なく動作し、本来あるべきページを表示しますが、2 つの問題があります。

1) 1 ページあたりのアイテム数を例として 10 に設定すると、フィードのアイテム数が 10 以下の場合、何も表示されません。たとえば、フィードに 5 つの項目がある場合、1 ページあたりの結果数を 4 に設定して、2 つのページを作成して表示する必要があります。5または10を表示するように設定すると、何も表示されません。

2) これは上記に関連している可能性がありますが、フィードに 100 個のアイテムがあり、1 ページあたりのアイテム数を 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>

上記のコーディングの量を調べて何かを見つけるのは難しいことを知っているので、それは少し遠いショットです.

よろしくお願いいたします。

4

1 に答える 1

1

あなたのコードにはいくつかの間違いがあります。

最初は、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ページが作成されるという2番目の問題は、これに関連しています:

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

100 個のアイテムがあり、1 ページあたり 10 個のフィードがある場合、10 ページ目を表示します。あなた$startNumberは 90 歳です。インデックスが 0 から始まるためです。$startNumber + $itemsPerPage正確に 100 なので、あなたの餌の量も$numItems100 です。

したがって、<=をに置き換え<ます。

于 2013-10-05T17:32:55.083 に答える