PHP-CodeIgniter 如何全局传值?
现在从数据库中 读取一条信息,想在所有的模板页面中显示,应该怎么传值?
有没有类似这样的方法 $this->assign('abc',$abc);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
现在从数据库中 读取一条信息,想在所有的模板页面中显示,应该怎么传值?
有没有类似这样的方法 $this->assign('abc',$abc);
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(4)
在applicationcore目录下拓展CI_Controller, 拓展的类里调用数据,全局可调用
我可以挖坟不?
CI全局变量之类的,目前我自己常用的有两种方法
一、写个库到/application/libraries/下,比如global_var.php
class Global_var
{
var $CI;
/**
* 在构造函数内加载变量
*
*/
function __construct()
{
$this->CI =& get_instance();
$global['var1'] = 'test1';
$this->CI->load->vars($global);
}
}
然后在config/autoload.php中的$autoload['libraries']加入global_var,之后$var1就可以直接在view里使用了。
二、另外一种方法就是在core中扩展MY_Controller,在这个扩展类中定义$viewdata,如
class MY_Controller extends CI_Controller
{
var $viewdata = array();
/**
* something to say
*/
function __construct()
{
$this->viewdata['var1'] = 'test1';
// do something...
}
}
控制器继承MY_Controller之后,可以继续增加$this->viewdata的数据
class Product extends MY_Controller
{
/**
* something to say
*/
function __construct()
{
parent::__construct();
// do something...
}
function index()
{
$this->viewdata['var2'] = '.....';
$this->load->view('view_file', $this->viewdata);
}
}
$this->load->view('view_file', $this->viewdata); 之后,view文件内就可以使用$var1
以上两种方法可以实现全局数据,比如用户登录信息、放在头部的一些动态内容。
这与前台页面布局有关。你看,假如你是这样的场景:页面分为导航栏和内容展示夜,你希望用户进入不同页面时导航栏会有标题的高亮显示,这时就需要你说的向全局投递数据给前台。
解决:你先在视图文件夹建立一个index.php文件,为项目的整体页面架构。
<html>
<head>
<!-- head部分 -->
</head>
<body>
<!--你页面导航栏部分-->
<?php $this->load->view($template);?> <!-- 加载你页面的主体内容,其中$template为你想要加载的其他视图 -->
</doby>
</html>
然后在你的控制器中:
$data['template'] = 'set_bad';
$this->load->view('index',$data);
说明:这个控制展示的视图文件为set_bad;
$data 为投递给视图的数据,CI规定:当调用多个视图时,只需向其中一个投递数据在其他视图也能使用。 故$data也可以投递给上面的index.php和set_bad.php视图文件;
你要在所有的模板页面中显示,在这中模式下,只需把值传递给index.php视图即可,set_bad.php视图显示本页面的特殊数据
PS:CI论坛有个相似的例子:http://codeigniter.org.cn/forums/forum.php?mod=viewthread&tid=1176
请参看CI手册--视图--中的给视图添加动态数据