我正在使用codeigniter 2.x.我需要的是从视图文件config/template.php
内部向/views/home.php
数组中插入值。
我已经创建了自定义配置文件application/config/template.php
:
$config['site_name'] = "Sitename";
$config['site_lang'] = "En-en";
$config['page_name'] = "Pagename";
$config['css_page'] = "default";
$config['alias'] = "";
$config['head_meta'] = array(
'description' => 'description',
'keywords' => 'meta, keywords',
'stylesheets' => array(
'template.css'
),
'scripts' => array(
'jquery.js',
'template.js'
),
'charset' => 'UTF-8'
);
$config['sidebars'] = array();
然后,我使用application/views/template/template.php
作为我的主要HTML布局,在开头我包含一个文件application/views/template/includes/inc-tpl-cfg.php
,它将我的模板配置全局化为一个带有数组的文件,所以我可以访问它们更容易一点。以下是inc-tpl-cfg.php
的内容:
<?php
// No direct acces to this file
if (!defined('BASEPATH')) exit('No direct script access allowed');
/* Template configuration needs to be defined to make them accessible in the whole template */
$cfg_template = array(
'sitename' => $this->config->item('site_name'),
'sitelang' => $this->config->item('site_lang'),
'pagename' => $this->config->item('page_name'),
'csspage' => $this->config->item('css_page'),
'charset' => $this->config->item('charset','head_meta'),
'description' => $this->config->item('description','head_meta'),
'keywords' => $this->config->item('keywords','head_meta'),
'stylesheets' => $this->config->item('stylesheets','head_meta'),
'scripts' => $this->config->item('scripts','head_meta'),
'sidebars' => $this->config->item('sidebars')
);
/* Template variables */
$cfg_assetsUrl = base_url() . 'assets';
// If pagename exists than concatenate it with a sitename, else output only sitename
if(!empty($cfg_template['pagename'])){
$title = $cfg_template['pagename'] . ' - ' . $cfg_template['sitename'];
}else{
$title = $cfg_template['sitename'];
}
我的主要模板布局中的一部分是带有侧边栏的块:
<div id="tpl-sidebar">
<?php foreach($cfg_template['sidebars'] as $sidebar):?>
<?php $this->load->view('modules/'. $sidebar);?>
<?php endforeach ;?>
</div>
最后,它会将application/views/home.php
加载到div
内的特定applications/views/template/template.php
块中。这是/views/home.php
:
<?php
// No direct acces to this file
if (!defined('BASEPATH')) exit('No direct script access allowed');
// Page configuration
$this->config->set_item('page_name','Homepage');
$this->config->set_item('css_page','home');
$this->config->set_item('alias','home');
?>
<p>
WELCOME BLABLABLA
</p>
</h3>
我可以在一个部分中定义/覆盖config/template.php
的默认值,并为每个视图使用特定值。所以我的问题是,如何通过插入一些新项来扩展此视图文件中的$config[sidebar]
数组,例如:recent.php
,rss.php
等等?
很抱歉有一个大代码。
提前致谢。
答案 0 :(得分:1)
为什么不在控制器中设置配置变量? 视图不适用于逻辑。
答案 1 :(得分:1)
你不应该在视图中这样做,设置数据应该从控制器完成。 视图应该只处理视图逻辑,而不是设置逻辑本身...... 然后你将控制器中的变量传递给视图。
答案 2 :(得分:0)
好的,我明白了:
这是我应该在views/home.php
:
$this->config->set_item('sidebars',array(
'recent',
'rss'
));
非常感谢。