【问题标题】:How to set the controller and model in layout/default to load in all pages如何在布局/默认中设置控制器和模型以在所有页面中加载
【发布时间】:2013-03-29 17:38:03
【问题描述】:

布局

对于我加载数据时的所有页面,但模型和控制器不起作用。我指定的其他模型工作。我的意思是,一个控制器和所有页面的布局模型,但其他页面有自己的模型和控制器。所有页面一个控制器,每个页面一个控制器。

<?php foreach ($sidebars as $row):  ?>
<tr><td><?php echo $row->title; ?> </td></tr>
<?php endforeach; ?>

<div id="main" role="main" class="content">
            {content}------here this show my pages content other model and controller
</div>

控制器

在我的控制器上加载我的页面

现在如果我再次加载其他页面,我必须输入

$this->load->model('side_model');
            $data['sidebars'] = $this->side_model->get_sidebar();

这是我的一个页面控制器,它可以工作,但如果不提及其他控制器,那么它不起作用我想将它作为每个页面的控制器,我不想在上面的代码中的每个页面控制器中提及

"<?php"
    public $layout = 'default'

    public function index()
    {
        $this->load->model('side_model');
        $data['sidebars'] = $this->side_model->get_sidebar();   
        $this->load->view('Layout/default',$data);
    }

型号

function get_sidebar(){
    $this->db->select('*');
    $this->db->from('side');
    $this->db->where('active','1');
    $this->db->order_by('added_date', 'DESC');

    return $this->db->get()->result();

如何为所有页面制作一个具有多种功能的主控制器和模型?

【问题讨论】:

    标签: php mysql codeigniter


    【解决方案1】:

    创建一个名为 core/MY_Controller.php 的文件:

        class MY_Controller extends CI_Controller {
    
            public function __construct(){
                parent::__construct();
                $this->load->model("side_model");
                $this->data["sidebars"] = $this->side_model->get_sidebar();
            }
    
            protected function get_html_meta($meta){
                // method will be available for all extending controllers
                return ucfirst($meta)." ".date("Y-m-d");
            }
    
        }
    

    从现在开始,您应该扩展 MY_Controller 而不是 CI_Controller,在您现有的控制器中,您现在可以传递可用于视图的变量 $this-&gt;data(我添加了一些 $this-&gt;data 用法及其范围的示例:

    class your_controller extends MY_Controller {
    
        public function index(){
            $this->data["html_meta"] = $this->get_html_meta("this is meta");
            $this->data["html_title"] = "Hello World!";
            $this->load->view('Layout/default',$this->data);
        }
    
    }
    

    注意:与$this-&gt;data 不同,$data 的作用域仅在您声明的函数内。

    对于全局模型,一旦 MY_Controller 构造函数(或 autoload.php)加载模型,您就可以调用该模型,只要您的其他控制器扩展 MY_Controller。

    【讨论】:

      【解决方案2】:

      编写你自己的控制器

      class ParentController extends CI_Controller {
      
          public function index()
          {
              echo 'Hello World!';
          }
      }
      
      class Blog extends ParentController {
      
          public function index()
          {
              echo 'Hello World!';
          }
      }
      

      【讨论】:

      • 这个答案没有解释任何东西。从字面上看。
      • 它可以工作,但是当我加载其他控制器时它不起作用当我的每个控制器都有自己的视图和模型时,如何让控制器加载到页面中而没有提到每个控制器
      • 它将帮助您使用父控制器的所有功能。
      • @rafiq 你必须用父控制器而不是 CI_Controller 扩展你所有的子控制器。
      • 实际上我已经创建了一个:布局/默认值...这个默认值在我的所有页面上,我不想在默认情况下设置一个控制器,因此它将与其他控制器和模型一起加载
      猜你喜欢
      • 1970-01-01
      • 2019-06-27
      • 1970-01-01
      • 1970-01-01
      • 2014-01-18
      • 1970-01-01
      • 1970-01-01
      • 2015-10-19
      • 1970-01-01
      相关资源
      最近更新 更多