学习CodeIgniter-相当于PHP包括

学习CodeIgniter-相当于PHP包括,php,codeigniter,Php,Codeigniter,第一次 我正在学习CodeIgniter,作为我的第一个项目,我正在重写CI中的一个现有站点 在现有站点上,所有动态或静态页面都使用PHP include加载从数据库中的categories表填充的sidebar.PHP <div id="sidebar"> <?php $result = mysql_query('SELECT category_id, name, url FROM categories ORDER BY category_id ASC'); whi

第一次

我正在学习CodeIgniter,作为我的第一个项目,我正在重写CI中的一个现有站点

在现有站点上,所有动态或静态页面都使用PHP include加载从数据库中的categories表填充的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>
有人能给我指一下正确的方向吗?虽然只是在侧边栏中使用一个php include将是快速而简单的,但它似乎不像MVC的方式


为这篇冗长的文章道歉,并提前表示感谢

页面控制器中的$data数组需要有一个“results”条目。传递给视图的数组中的值将转换为局部变量,以便在视图中使用。您可以在侧栏控制器中正确地执行此操作(实际上并不需要).

您正在加载
页面
控制器并调用
侧栏
控制器的视图变量
$result
侧栏
控制器将加载时获取数据,您正在加载
页面
控制器您必须在
页面
控制器中加载
侧栏
的模型 像


如果您的所有页面都需要侧栏,您可以这样做,首先需要扩展MY_控制器,然后使用MY_控制器扩展所有控制器

<?php

class Pages extends MY_Controller {

   public function __construct() {
      parent::__construct();
   }

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
    $data['sidebar'] = $this->_sidebar;
    $this->load->view('templates/header', $data);
    $this->load->view('pages/'.$page, $data);
    $this->load->view('templates/footer', $data);

}
}
我的\u控制器放入应用程序核心目录

<? 
 MY_Controller extends CI_Controller{

   public $_sidebar = '';

   public function __construct() {
      parent::__construct();
      $this->_sidebar = $this->sidebar();
   }

   private function sidebar(){
       $this->load->model('sidebar_model');

      $data['result'] = $this->sidebar_model->get_categories();

      return $this->load->view('templates/sidebar_view', $data,TRUE);
    }    

 }

<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);

}
}
A PHP Error was encountered

Severity: Notice

Message: Undefined variable: result

Filename: templates/sidebar_view.php

Line Number: 2 
class Pages extends CI_Controller {

public function view($page = 'home')
{
  $this->load->model('sidebar_model');
  $data['result'] = $this->sidebar_model->get_categories();
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);

}
}
<? 
 MY_Controller extends CI_Controller{

   public $_sidebar = '';

   public function __construct() {
      parent::__construct();
      $this->_sidebar = $this->sidebar();
   }

   private function sidebar(){
       $this->load->model('sidebar_model');

      $data['result'] = $this->sidebar_model->get_categories();

      return $this->load->view('templates/sidebar_view', $data,TRUE);
    }    

 }
<?php

class Pages extends MY_Controller {

   public function __construct() {
      parent::__construct();
   }

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
    $data['sidebar'] = $this->_sidebar;
    $this->load->view('templates/header', $data);
    $this->load->view('pages/'.$page, $data);
    $this->load->view('templates/footer', $data);

}
}