2012-08-12 41 views
0

我使用codeigniter 2.x.我需要的是從視圖文件/views/home.php的內部將值插入到config/template.php的數組中。在視圖文件中擴展Codeigniter中的自定義配置陣列

我已經創建了一個自定義配置文件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入內applications/views/template/template.php具體div塊。這是一個/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> 

有一個部分,其中i可以定義/從config/template.php覆蓋一個默認值和使用特定的那些對於每個視圖。所以我的問題是,我怎麼能擴大一個$config[sidebar]陣列在這個視圖文件插入一些新的項目,例如:recent.php,rss.php等...?

對不起,有一個很大的代碼。

在此先感謝。

+0

是什麼讓你相信這是可能的?只是爲了探究或者你真的做了一些研究? – hakre 2012-08-12 15:22:05

+0

@hakra對於愚蠢的問題感到抱歉,但我真的很困惑這個問題,我用'php數組插入值'等類似的東西搜索了一下,但是不能得到它。你認爲這是不可能的?或者只是指着我正確的方向,所以我可以繼續尋找一些線索?謝謝 – aspirinemaga 2012-08-12 15:31:31

回答

0

好吧,我知道了:

這是我應該在views/home.php內插入:

$this->config->set_item('sidebars',array(
    'recent', 
    'rss' 
)); 

還是要謝謝你。

1

爲什麼不在控制器中設置配置變量? 視圖不適用於邏輯。

+0

我想在視圖文件中,我可以在一個地方定義所有常見的東西,如「page_name」,h1標題,別名等等,它們不是動態的,而是由我定義的。你認爲這不是最佳做法,對吧? – aspirinemaga 2012-08-12 15:45:28

+1

這絕對不是最佳做法。最好的做法是在控制器中定義這些變量。 MVC方法旨在區分邏輯與視圖,但您正試圖將它們結合起來。 – Tim 2012-08-12 15:47:27

1

你不應該這樣做的意見,設置數據應該從控制器完成。 視圖只應該處理視圖邏輯,而不是設置邏輯本身...... 然後,當視圖中所有設置和準備就緒時,將控制器中的變量傳遞給視圖。

相關問題