0

これを再度投稿する代わりに、ここで書き直して詳しく説明することにしました。

jthemanから次のコードを受け取りました。これにより、DBから52の更新を選択し、毎週新しい更新を追加して古い更新を削除できます。それは絶対に完璧に動作します。

彼のコード:

$starttime = strtotime("28 December 2012"); // a recent Friday
  $week = 7 * 24 * 60 * 60; // time value of a week
  $posts = 185; // number of posts in your db
  $limit = 52; // number of shown posts
  $offset = floor((time()-$starttime)/$week); // rounds down difference in weeks from startdate until now
  while ($offset>$posts-$limit) $offset = $offset - ($posts-$limit); 
  // this will start over when you have reached the end of the cycle ie offset 148...

そして私の質問:

// retrieve all update details
$conn = dbConnect('query');
$sql = "SELECT *
FROM updates
WHERE flag_live = 'Y'
ORDER BY update_id DESC
LIMIT ".$offset.",".$limit;
$result = $conn->query($sql) or die(mysqli_error());
$uInfo = $result->fetch_assoc();

繰り返しますが、これは完全に機能します。新しい問題は、1ページで52の更新を取得し、1ページあたり4を設定して、1つの長いページではなく13ページをスクロールできるようにしたいということです。

したがって、私がやりたいのは、52の更新が選択されるように(そして毎週金曜日に新しい更新が追加され、古い更新が削除されるように)このクエリを変更することですが、ページに一度に4つしか表示できません。これは基本的に2つの機能を実行するクエリを記述しているので、これはページ付けの問題ではないことに気付きました。

これはサブクエリで実行できますか?jQueryスライダーまたは同等のものを使用してページネーションを行うこともできますが、それは避けたいと思います。

どうもありがとう!

4

2 に答える 2

1

(サーバー側の)PHPコード内でこれを解決するために、urlパラメーターを追加できます?page=x。ここでxはページ番号です。

計算内でほぼ同じ:

$starttime = strtotime("28 December 2012"); // a recent Friday
$week = 7 * 24 * 60 * 60; // time value of a week
$posts = 185; // number of posts in your db
$totallimit = 52; // number of shown posts (on all pages)
$limit = 4; // number of posts on each page.
$offset = floor((time()-$starttime)/$week); // rounds down difference in weeks from startdate until now
while ($offset>$posts-$totallimit) $offset = $offset - ($posts-$totallimit); 
// this will start over when you have reached the end of the cycle ie offset 148...

// get the page number (or set it to 0 if not set)
if (isset($_GET['page']) && intval($_GET['page'])) $page=intval($_GET['page']);
else $page = 0;

$offset = $offset + ($page*$limit); // correct the offset according to the page number

次に、変更せずにDBクエリを使用します。

次に、ビューにページリンクを追加します(このコードは、上記が以前に実行された場合に機能します)。

<?php for($p=0;$p<ceil($totallimit/$limit);$p++): ?>
   <a href="mypage.php?page=<?php echo $p; ?>" <?php if ($p==$page) echo 'class="active"'; ?>>Page <?php echo $p+1; ?></a> |
<?php endfor; ?>

mypage.php(スクリプトの正しいファイル名に置き換えてください)

現在選択されているページのページアンカーactiveにクラスを追加しましたが、これは好きなように行うことができます。

于 2013-01-02T08:35:54.580 に答える
0

これがあなたが求めているものだと思います。この「機能」を使用すると、より多くのオプションを「切り替える」ことができますが、本当に必要になるとは思いません$limit=。ニーズに合わせて番号を変更するだけです。

<?php

  $starttime = strtotime("28 December 2012"); // a recent Friday
  $week = 7 * 24 * 60 * 60; // time value of a week
  $posts = 200; // number of posts in your db
  //$limit = 52; // number of shown posts

if($posts > 100) // or you can enter here $posts == 200, but it is better 2 leave it on "automatic"..
{ 
$limit = 52; //or as many you like like 30
} 
else
{ 
$limit = 6; // or as many you like ie 10 
}

  $offset = floor((time()-$starttime)/$week); // rounds down difference in weeks from     startdate until now
  while ($offset>$posts-$limit) $offset = $offset - ($posts-$limit); 
  // this will make the cycle start over when you have reached the end (ie offset 148)...

  ?>
于 2013-01-01T05:27:22.170 に答える