问题描述
我只是想知道使用 codeigniter 实现带有更改内容(例如通知)的菜单、页眉和页脚的最佳方法/实践.
I was just wondering the best way/practice to implement menus, headers and footers with changing content such as notifications using codeigniter.
例如,我在标题菜单中有一个警报,该警报链接回数据库中的数据,并且每次加载页面时我都需要检查更改.最初我以为我可以每次都使用 $this->load->view('header') 调用标题,但这意味着我需要一个全局函数来计算警报的任何更改,然后将其传递给标题视图,每次都不好!
For example say I had an alert within the header menu that linked back to data within a database and I needed to check for changes each time a page is loaded. Initially I thought I could call the header using $this->load->view('header') each time, but this would mean I would need a global function to work out any changes on alerts and then pass that to the header view, each time, not good!
我想我需要一种全局方式来调用从任何控制器加载网站标题(菜单)的函数,该控制器计算出内容并相应地显示视图.
I guess I need a global way to call function that loads the website header (menu) from any controller which works out the content and displays the view accordingly.
推荐答案
例如一个显示博客页面的控制器.
在您的控制器构造函数中 - 定义您的博客视图文件所在的文件夹和模板名称
so for example a controller that shows blog pages.
in your controller constructor - define the folder your blog view files are in and the template name
// the folder your content files are in $this->templatefolder = 'blog' ; // the template name $this->view_template = 'blog_template' ;
在您准备调用某些视图时的方法中
in a method when you are ready to call some views
$data['content01'] = 'search_articles'; $data['content02'] = 'main_article'; $data['content03'] = 'suggested_articles'; $this->load->view( $this->view_template, $data );
模板本身视图/blog_template.php
the template itself views/blog_template.php
// opening html etc that is generic to website $this->load->view('tmpl_open'); // so if the header has to be dynamic // get the header from a model (or library etc) // and either pass the header content or just echo it out directly $this->load->model('header'); if( ! $newHeader = $this->header->returnNewHeader() ) { // fallback if the header doesn't come back from the model $this->load->view('default_header'); } else { echo $newHeader ; } // this is optional but IF the template folder is not set // we have a default folder called 'pages' to look in for the content views // but in this example the folder is set to be 'blog' // so the blog view files will be in application/views/blog/search_articles.php etc etc if( isset($this->templatefolder)){ $templatefolder = $this->templatefolder . '/' ; } else { $templatefolder = 'pages/'; } // header that is specific for the content $this->load->view($templatefolder . 'header'); // so in this specific example its going to load 3 view files, but this part is completely flexible if(isset($content01)) $this->load->view($templatefolder.$content01); if(isset($content02)) $this->load->view($templatefolder.$content02); if(isset($content03)) $this->load->view($templatefolder.$content03); if(isset($content04)) $this->load->view($templatefolder.$content04); if(isset($content05)) $this->load->view($templatefolder.$content05); if(isset($content06)) $this->load->view($templatefolder.$content06); if(isset($content07)) $this->load->view($templatefolder.$content07); if(isset($content08)) $this->load->view($templatefolder.$content08); // example of an optional file that you can uncomment for testing // $this->load->view('objecttesting'); // bottom nav bar generic to website $this->load->view('tmpl_footer'); // closing html etc generic to website $this->load->view('tmpl_close');