0

不确定某人是否可以帮助解决此问题,但尝试了各种方法,但似乎无法解决。在搜索了相当多但没有找到任何东西之后,我设法将粗略的临时修复到位,但这以迂回的方式工作并且并不理想。

我正在尝试显示提要的输出并具有对结果进行分页的示例代码。

示例代码几乎可以正常工作并按原样显示页面,但存在两个问题:

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>

我知道查看上面的编码量并发现任何东西可能很困难,所以我知道这有点远。

提前感谢您提供的任何帮助。

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 个页面,这与此有关:

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

如果您有 100 个项目,每页 10 个提要,并显示第 10 页!你$startNumber是 90,因为你从一个基于 0 的索引开始。正好是 100,所以$startNumber + $itemsPerPage它正是你的提要数量,$numItems也是 100。

所以替换<=<.

于 2013-10-05T17:32:55.083 回答