3

ページごとの項目を制限できるように変更する必要がある単純なニュース システムがありますが、これを行うものがないため、自分で行う必要があります。

基本的に、関数はフラット ファイルの配列全体を表示するだけで、1 ページあたり 3 項目に制限したいと思います (構成可能)。

私の開始ロジックは次のとおりです。

$itemspage=pages->current_page;
$itemsperpage=3;
$limitn=$itemperpage*$itemspage;
$itemindex=$limitn-2;

ページが 1 の場合、配列インデックス 1,2,3 からのニュースが表示されます。ページが 2 の場合、配列インデックス 4,5,6 からのニュースが表示されます...

これは論理的には機能すると思いますが、配列内のニュースを 3 つに分割できない場合はどうなりますか? このロジックでは、(少なくとも開始インデックスで) バグが発生するはずです。

コード全体は次のとおりです。

$list = $this->getNewsList();
  $pages = new Paginator;
  echo "<table class='newsList'>";
  foreach ($list as $value) {
    $newsData = file($this->newsDir.DIRECTORY_SEPARATOR.$value);
    $newsTitle  = $newsData[0];
     $submitDate = $newsData[1];    
     unset ($newsData['0']);
     unset ($newsData['1']);

     $newsContent = "";
     $itemspage=pages->current_page;
     $itemperpage=3;
     $limitn=$itemperpage*$itemspage;
     $itemindex=$limitn - 2;
     foreach ($newsData as $value) {
           $newsContent .= $value;
     }

    echo "<tr><th align='left'>$newsTitle</th>
              <th class='right'>$submitDate</th></tr>";
    echo "<tr><td colspan='2'>".$newsContent."<br/></td></tr>";
  }
  echo "</table>";

for はまだ行われておらず、分割の背後にあるロジックのみです。私たちを手伝ってくれますか?

4

1 に答える 1

0

$ newsContentをどのように構築しているかはわかりませんが、おそらくあなたの答えはここにあります。

$list = $this->getNewsList();

$pages = new Paginator;
$itemspage = $pages->current_page;
$itemperpage = 3; // you might want te define this property in the paginator also ($itemperpage = $pages->items_per_page);
$currentPageList = array_slice($list, ($itemspage - 1) * $itemperpage, $itemspage);

echo "<table class='newsList'>";
foreach ($currentPageList as $value) {
    $newsData = file($this->newsDir.DIRECTORY_SEPARATOR.$value);
    $newsTitle  = $newsData[0];
    $submitDate = $newsData[1];
    unset ($newsData['0']);
    unset ($newsData['1']);

    $newsContent = "";
    $limitn=$itemperpage*$itemspage;
    $itemindex=$limitn - 2;
    foreach ($newsData as $value) {
        $newsContent .= $value;
    }

    echo "<tr><th align='left'>$newsTitle</th>
    <th class='right'>$submitDate</th></tr>";
    echo "<tr><td colspan='2'>".$newsContent."<br/></td></tr>";
}
echo "</table>";

array_sliceに注意してください:

array_slice()は、offsetおよびlengthパラメーターで指定された配列配列から要素のシーケンスを返します。

于 2012-10-28T10:08:23.210 に答える