4

试图确定在 codeigniter 中处理视图的最佳方式。现在任何我认为的东西似乎都太乱了。

目前我有3个相关的观点:

1) 页眉 2) 内容 3) 页脚

每个控制器都有这样的东西。一些控制器甚至多次出现这种情况(同一个控制器中的不同功能):

$this->load->view('head', $data);
$this->load->view('volunteers/add_profile.php',$content_data);
$this->load->view('foot'); 

必须在每一页上加载页眉和页脚似乎很愚蠢。但是,每个页面的标题中的数据都会略有不同(元标记、样式表、加载的脚本等)。

我有更清洁的方法吗?

谢谢!

4

5 回答 5

4

我喜欢用类似的方法创建一个父控制器renderPage('content_view', $data)。该方法可以包括页眉、菜单、页脚……这样,所有视图加载内容都保存在控制器中,我不必为每个操作或视图的页眉、菜单或页脚而烦恼。它也很灵活,因为您的子控制器可以重新定义renderPage()方法以适应他们的目的。

如果您需要加载多个内容视图,您可以创建一个renderPage()接收字符串数组而不是字符串的方法。

于 2013-02-12T19:03:43.043 回答
1

无论是@TheShiftExchange 建议的内容,还是如果您的应用程序允许,您可以从每个内容视图(这是当时控制器调用的唯一视图)中调用页眉和页脚视图。

于 2013-02-12T17:37:57.997 回答
1

是的 - 有一个模板视图。在您的控制器中:

$data['header'] = xxx;
$data['content'] = xxx;
$this->load->view('my_template', $data);

然后在您的 my_template.php 视图文件中:

$this->load->view('head', $header);
$this->load->view('volunteers/add_profile.php',$content);
$this->load->view('foot'); 
于 2013-02-12T17:13:00.547 回答
0

我创建了自己的控制器,在其中创建MY_Controller extends CI_Controller类,然后MY_Controller使用访问修饰符$data$loadviewArray.

public $data = array(); 
public $loadviewArray = array();

在此之后我创建函数MY_Controller

public function loadview() {
   foreach ($this->loadviewArray as $key => $val) {
      $this->load->view($val, $this->data);
   }
}

然后我在控制器创建功能中创建控制器Adminextends MY_Controller像这样。Admin extends MY_ControllerAdminindex

public function index() {
   $this->data["page_title"] = "Login";
   $this->data["records"] = $data; // You can pass data
   $this->loadviewArray = array("admin/header", "admin/login", "admin/footer");
   $this->loadview();
}

$data访问修饰符数组中,我在视图和加载视图中传递数据,$loadviewArray然后调用一个函数来加载视图,您可以这样做,这对我现在也很有帮助。并分别创建页眉和页脚视图...

于 2014-01-30T06:18:36.887 回答
-1

请检查https://github.com/alzalabany/codeigniter-base-controller/tree/master

所以你总是可以使用模板库。但由于某种原因我不喜欢它们!

codeigniter 允许你扩展它的核心;如果你去上面提到的链接你可以看到一个小例子

在这个例子中,每个将扩展 MY_controller 的控制器都将从这些默认值开始

protected        $body='base/body',
                        $title='Codeigniter Z master',//txt
                        $js=array(),//filename
                        $inline_js='',//script
                        $css=array(),
                        $inline_css='',//style
                        $breadcrumb=FALSE,//<li><a>
                        $content=array(),//html
                        $noEcho = FALSE;

因此,如果您选择在 MY_controller 中更改它们,其效果将是默认的,否则使用 $this->title = 'Codeigniter - Welcome page'; 例如,在您的控制器构造函数中;

加载辅助是一项非常简单的工作,只需调用$this->_assets()资产的位置(将 MY_controller.php 默认位置编辑到您的资产文件夹);如果它是一个 inline_js/css 就调用

$this->_assets('alert("hi");','js');

如果要将视图加载到页面部分中,请使用$this->outv(view_path,view_data,section_name);

如果您只想将 html 加载到变量中,您可以使用

$this->out('页脚','页脚');

最后只需调用 ->_flush();

我使用的其他一些选项

$noEcho; 如果设置,它将清除所有缓冲区以在将您的视图内容发送到浏览器之前删除任何回声;

您还可以在 MY_controller 中设置注销或登录等功能,您的任何控制器都可以访问它http://localhost/ci/welcome/logout

无论如何:) 我希望能回答你的问题!

于 2014-01-30T05:19:46.107 回答