私は一般的にCodeigniterとPHPを初めて使用するので、ご容赦ください。
クエリから返された結果をページ分割するために、codeigniter ページ分割クラスを使用しようとしています。以下のコードは、パラメーターの受け渡しを必要としない静的クエリで問題なく動作します。ただし、変数をURLのパラメータとして渡そうとするとうまくいかないようです。
localhost/index.php/termsbyletter/index/a
ここで、「a」はコントローラー/モデルに渡される $letter 変数です。
PHP はエラーを出力しておらず、モデル内の record_count 関数と同様に、クエリは期待どおりに実行されます。その結果、すべてのクエリ結果が表示されますが、ページネーション リンクをクリックしても同じページに表示されます。
また、モデル内で、クエリを 2 回実行するよりも効率的に行数を返す方法はありますか? 私はこれが必要であることをここで読みましたが、この値を他の方法で渡そうとしても成功していません。
これが私のコントローラーです:
<?php
class Termsbyletter extends CI_Controller
{
public function __construct() {
parent:: __construct();
$this->load->helper("url");
$this->load->model("terms_by_letter");
$this->load->library("pagination");
}
public function index($letter) {
$config = array();
$config["base_url"] = base_url() . 'index.php/termsbyletter/index/' . $letter;
$config["total_rows"] = $this->terms_by_letter->record_count($letter);
$config["per_page"] = 3;
$config["uri_segment"] = 5;
$this->pagination->initialize($config);
$page = ($this->uri->segment(5)) ? $this->uri->segment(5) : 0;
$data["results"] = $this->terms_by_letter->term($config["per_page"], $page, $letter);
echo $this->pagination->create_links();
$this->load->view("/templates/header");
$this->load->view("/terms/index", $data);
$this->load->view("/templates/footer");
}
}
そしてモデル:
class Terms_by_letter extends CI_Model
{
public function __construct() {
parent::__construct();
$this->load->database();
}
public function record_count($letter) {
$query = $this->db->query("SELECT * FROM news WHERE LEFT(slug, 1) = '$letter'");
return $query->num_rows();
}
public function term($limit, $start, $letter) {
$this->db->limit($limit, $start);
$query = $this->db->query("SELECT * FROM news WHERE LEFT(slug, 1) = '$letter'");
if ($query->num_rows() > 0) {
foreach ($query->result() as $row) {
$data[] = $row;
}
return $data;
}
return false;
}
}
ビューに結果を出力するために、次のようなものを使用しています。
<?php
foreach($results as $data) {
echo $data->slug "<br>";
}
?>
<p><?php echo $links; ?></p>