将Array推送到$ data变量以传递给视图

时间:2011-07-09 10:53:49

标签: php arrays codeigniter

我正在使用CI,并且对于每个主页(例如内容),我使用以下命令在构造函数中加载特定的css文件:

$this->load->vars(array('add_css'=>array('contents')));

在我的视图中,我检查add_css数组是否存在,如果是,我加载contents.css。现在在我的控制器文件中(在本例中为contents.php),我有很多方法,虽然所有这些方法都会加载额外的contents.css,但具体的方法也会有(如果有的话)自己的add_css,例如我正在进行方法审查,我想加载额外的rating.css。我做的是:

$data['add_css'] = array('rating');

但它不起作用,因为rating.css会覆盖构造函数中的变量。

那么有什么方法可以推动阵列?我已经尝试过array_push($ data ['add_css'],'rating')但它不起作用。

由于

2 个答案:

答案 0 :(得分:0)

我有类似的问题。读取数组中的内容,写入另一个数组,向其推送新信息,将第二个数组覆盖为数据。

答案 1 :(得分:0)

我能想到的最优雅的方式是: 的 1 即可。在你的控制器中,或者如果你有MY_Controller(它更好)添加新的受保护的(因此可以从所有控制器获得)属性,它将保留所有加载的css文件。

protected $_addCss = array();

<强> 2 即可。添加新方法以将新css文件设置到此数组:

protected function _addCssFile($file)
{
    $this->_addCss[] = $file;
    return $this; //So you can chain it when adding but not necessary
}

第3 即可。手动加载所有添加的css文件的新方法。

protected function _loadCssFiles()
{
        //Load the vars then reset the property to empty array again
    $this->load->vars(array('add_css' => $this->_addCss));
    $this->_addCss = array();
    return $this;
}

<强> 4 即可。在您的应用程序控制器中,您可以像这样使用它:

public function __construct()
{
        parent::__construct();
        $this->_addCssFile('contents');
}

public function test()
{
        //Chain the methods so you can add additional css files
    $this->_addCssFile('contents')
        ->_addCssFile('rating')
        ->_loadCssFiles()
        ->load->view('test');
}

<强> 5 即可。在您看来:

echo '<pre>';
print_r($add_css);
echo '</pre>';
Result:
Array
(
    [0] => contents
    [1] => contents
    [2] => rating
)