[英]Redirecting to load views in codeigniter
比如说我有我的主页视图。 在主页视图中,我有一个数据列表要分页,还有更多数据要传递给视图。
所以在我的页面控制器中(用于从 html 链接加载视图,例如“home”/“login”等)
public function home(){
//pagination here
//process data here to pass to navbar
$data['title'] = 'homepage';
$this->load->view('template/header',$data);
$this->load->view('template/navbar',$data);
$this->load->view('pages/home',$data);
$this->load->view('template/footer');
}
传递给导航栏的数据是各种通知,因为我计划在导航栏上为登录的用户添加一个通知下拉列表,因此我访问的每个页面都必须处理通知数据并将其传递给我的导航栏。
让我们举个例子,登录后:
public function login(){
//*validate data*
//*get data*
//*process data*
$result = $this->model->login($data);
if($result == TRUE){ //*db get where in model returns true if data entered exists*
redirect('pages/home');}
}
我做得对吗? 我知道它有效,因为我在注销功能中执行此操作,在销毁会话后,我只是重定向到页面控制器以查看主页。
因此,这使我的代码成为可能,如果这是可接受的方法,则可能将我的所有代码减少至少 30%,因为我的大部分代码都很长,因为我必须对数据进行分页,更不用说我将不得不分页的数据计划功能的过程我添加了类似通知,因此在每次成功后我完成的所有功能中,如果我必须加载需要所有这些数据的页面,那么我的代码将延长 50%,这对功能来说是不必要的。
例如上面的登录代码,如果上面的代码不起作用,那么我将不得不在加载视图主页之前添加分页+更多数据处理,因此代码会变长,但只有 20-40% 与功能相关.
这是我在将 pagination.php 添加到我的配置文件以进行自定义之前的某些功能的样子:
public function sample(){
//process data
if($data){//success
$num_rows = $this->model->count_rows('table',null);
$config['base_url'] = base_url().'';
$config['total_rows'] = $num_rows;
$config['per_page'] = 6;
$config['num_links'] = $num_rows;
$config['full_tag_open'] = '<ul class="pagination">';
$config['full_tag_close'] = '</ul>';
$config['first_link'] = 'First';
$config['last_link'] = 'Last';
$config['first_tag_open'] = '<li class="page-item">';
$config['first_tag_close'] = '</li>';
$config['prev_link'] = '«';
$config['prev_tag_open'] = '<li class="page-item prev">';
$config['prev_tag_close'] = '</li>';
$config['next_link'] = '»';
$config['next_tag_open'] = '<li class="page-item">';
$config['next_tag_close'] = '</li>';
$config['last_tag_open'] = '<liclass="page-item">';
$config['last_tag_close'] = '</li>';
$config['cur_tag_open'] = "<li class='page-item active'><a href='#'>";
$config['cur_tag_close'] = "</a></li>";
$config['num_tag_open'] = '<li class="page-item">';
$config['num_tag_close'] = '</li>';
$this->pagination->initialize($config);
$offset = $this->uri->segment(3);
$query = $this->db->get('table', $config['per_page'],$offset);
$data['title'] = 'page title';
$this->load->view('template/header',$data); //passing header title
$this->load->view('template/navbar'); //will be passing more data here for planned function
$this->load->view('pages/pagename', $data) /passing pagination data;
$this->load->view('template/footer');}
else{//if function fail redirects to the view
$num_rows = $this->model->count_rows('table',null);
$config['base_url'] = base_url().'';
$config['total_rows'] = $num_rows;
$config['per_page'] = 6;
$config['num_links'] = $num_rows;
$config['full_tag_open'] = '<ul class="pagination">';
$config['full_tag_close'] = '</ul>';
$config['first_link'] = 'First';
$config['last_link'] = 'Last';
$config['first_tag_open'] = '<li class="page-item">';
$config['first_tag_close'] = '</li>';
$config['prev_link'] = '«';
$config['prev_tag_open'] = '<li class="page-item prev">';
$config['prev_tag_close'] = '</li>';
$config['next_link'] = '»';
$config['next_tag_open'] = '<li class="page-item">';
$config['next_tag_close'] = '</li>';
$config['last_tag_open'] = '<liclass="page-item">';
$config['last_tag_close'] = '</li>';
$config['cur_tag_open'] = "<li class='page-item active'><a href='#'>";
$config['cur_tag_close'] = "</a></li>";
$config['num_tag_open'] = '<li class="page-item">';
$config['num_tag_close'] = '</li>';
$this->pagination->initialize($config);
$offset = $this->uri->segment(3);
$query = $this->db->get('table', $config['per_page'],$offset);
$data['title'] = 'page title';
$this->load->view('template/header',$data); //passing header title
$this->load->view('template/navbar'); //will be passing more data here for planned function
$this->load->view('pages/pagename', $data) /passing pagination data;
$this->load->view('template/footer');}
}
如果不考虑特定功能的实际代码,那已经很长了。 如果说它是重定向到主页的登录功能(那里有分页数据)。
我现在在做什么,我的问题是这样做是否可以:
页面控制器:
public function view(){
$num_rows = $this->model->count_rows('table',null);
$config['base_url'] = base_url().'';
$config['total_rows'] = $num_rows;
$config['per_page'] = 6;
$config['num_links'] = $num_rows;
$config['full_tag_open'] = '<ul class="pagination">';
$config['full_tag_close'] = '</ul>';
$config['first_link'] = 'First';
$config['last_link'] = 'Last';
$config['first_tag_open'] = '<li class="page-item">';
$config['first_tag_close'] = '</li>';
$config['prev_link'] = '«';
$config['prev_tag_open'] = '<li class="page-item prev">';
$config['prev_tag_close'] = '</li>';
$config['next_link'] = '»';
$config['next_tag_open'] = '<li class="page-item">';
$config['next_tag_close'] = '</li>';
$config['last_tag_open'] = '<liclass="page-item">';
$config['last_tag_close'] = '</li>';
$config['cur_tag_open'] = "<li class='page-item active'><a href='#'>";
$config['cur_tag_close'] = "</a></li>";
$config['num_tag_open'] = '<li class="page-item">';
$config['num_tag_close'] = '</li>';
$this->pagination->initialize($config);
$offset = $this->uri->segment(3);
$query = $this->db->get('table', $config['per_page'],$offset);
$data['title'] = 'page title';
$this->load->view('template/header',$data); //passing header title
$this->load->view('template/navbar'); //will be passing more data here for planned function
$this->load->view('pages/pagename', $data) /passing pagination data;
$this->load->view('template/footer');}
另一个控制器:
public function sample(){
//process data
if(success){
redirect('pages/view);
}else{
redirect('pages/view);
}
}
现在我有更多的空间来存放函数的实际代码。
这是您的解决方案。
首先在application/helpers
下创建一个 helper 类说custom_helper
。 然后自动加载辅助类在autoload.php
下application/config
$autoload['helper'] = array('custom');
在custom_helper
写一个函数说disp_navigation
if ( ! function_exists('disp_navigation')){
function disp_navigation(){ //pass any parameter you wish
$CI =& get_instance();
$CI->load->model('your-model-name'); //if needed
//paste all your code which you are using to render the navigation contents.
}
}
请注意$this
变量在 helper 类中不可访问,因此您必须使用$CI
代替$this
。
设置好助手类后,在视图中的任何位置调用该函数。
<html>
<body>
//call the disp_navigation
<?php echo disp_navigation(); ?>
</body>
</html>
您可以echo
或return
函数的结果并执行您想要的任何操作。
这真的很有帮助,因为您只能进行一次更改,并且它会反映在应用程序的任何地方。
希望这会帮助你。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.