初めて!
私は Code Igniter を学んでおり、私の最初のプロジェクトとして、既存のサイトを CI で書き直しています。
既存のサイトでは、動的または静的なすべてのページで PHP インクルードを使用して、データベースのカテゴリ テーブルから入力された sidebar.php を読み込みます。
<div id="sidebar">
<?php
$result = mysql_query('SELECT category_id, name, url FROM categories ORDER BY category_id ASC');
while ($row = mysql_fetch_array($result)) {
$name=$row['name'];
$url=$row['url'];
print "<p><a href=\"category/$url\">$name</a></p>";
}
?>
</div>
CI を始めたので、データベース呼び出し、サイドバー コントローラー、サイドバー ビューを備えたサイドバー モデルを作成し、このビューをデフォルトのページ コントローラーにロードする方法を考えました。
/application/models には sidebar_model.php があります
<?php
class Sidebar_model extends CI_Model {
public function __construct()
{
$this->load->database();
}
public function get_categories()
{
$query = $this->db->get('categories');
return $query->result();
}
}
次に、アプリケーション/コントローラーには sidebar.php があります
<?php
class Sidebar extends CI_Controller {
public function __construct()
{
parent::__construct();
}
public function index()
{
$this->load->model('sidebar_model');
$data['result'] = $this->sidebar_model->get_categories();
$this->load->view('templates/sidebar_view', $data);
}
}
そして、applications/views/templates には sidebar_view.php があります
<div id="sidebar">
<?php foreach($result as $row): ?>
<p><?php echo $row['name'] ?></p>
<?php endforeach ?>
</div>
これは私のメインページコントローラーから呼び出されます-
<?php
class Pages extends CI_Controller {
public function view($page = 'home')
{
if ( ! file_exists('application/views/pages/'.$page.'.php'))
{
// Whoops, we don't have a page for that!
show_404();
}
$data['title'] = ucfirst($page); // Capitalize the first letter
$this->load->view('templates/header', $data);
$this->load->view('pages/'.$page, $data);
$this->load->view('templates/sidebar_view', $data);
$this->load->view('templates/footer', $data);
}
}
私が抱えている問題は、ページコントローラーが明らかにサイドバービューをロードしている間 (ボックスが正しい CSS スタイルで表示されている)、PHP エラーをスローしていることです。
A PHP Error was encountered
Severity: Notice
Message: Undefined variable: result
Filename: templates/sidebar_view.php
Line Number: 2
ここで誰かが私を正しい方向に向けることができますか? サイドバーに php インクルードを使用するだけでも簡単ですが、MVC のやり方とは思えません。
長い投稿をお詫びし、事前に感謝します!