代码点火器:高效的设置方法&将常见元数据传递给视图

时间:2011-06-04 05:06:53

标签: codeigniter

我是CI的新手,想加载视图,导航和放大元数据以有效的方式完成。我刚刚完成了主页并提出了以下内容:

    class Home扩展Controller {

function index()
 {     
   // specify extra bits such as page title, section, extra js to load   
   $extra = array(
                    'title'   => 'Funky Boots Co Home',
                    'section' => $this->uri->segment(1),
                    'js'      => 'home,cycle',
                    'base_url'=> base_url()     
                  );                                 
   $this->template->load('public/templates/main', 'home_view', array('extra'=>$extra));
  }  
}    
  • 我正在使用基本模板库,因此我可以重复保存加载视图
  • 由于我在所有地方使用base_url,我认为最好将其设置为var一次
  • 我有共享js文件,这些文件总是包含但使用'js'值来传递此特定页面所需的任何js脚本的名称。
  • 部分将传递到视图以设置主体类,并传递到导航视图以进行链接突出显示

问题

  • 首先是有什么不妥 此?
  • 不是为每个函数设置所有这些额外的数组变量,而是 觉得我应该设置'section'& base_url自动一次。什么是 这样做的最好方法是什么?一个基地 控制器?

1 个答案:

答案 0 :(得分:2)

你处理它的方式没有错,但我会提出我的意见:

设置一些默认值,而不是每次加载模板时重新定义这些变量。您可以使用基本控制器,但由于我们只需要这些用于模板库,因此最好将它们设置在类本身中,或者在模板加载的配置文件中,或两者中。加载特定模板时,可以覆盖这些变量或回退到默认值。

您的模板base_url是否会在不同页面之间进行更改?如果答案为否,则无需将其设置为变量,只需在需要时调用base_url()即可。我个人为此设置了一个名为BASE_URL的全局可用常量(在我的配置文件中),但这只是首选项。如果它可能改变(但很少),那么这就是为什么设置一些默认值会有用的一个很好的例子。

您可以将$extra传递给第三个参数而不是array('extra' => $extra)。你应该用你需要的任何值填充数组,但当然这取决于类实际上做了什么。我觉得这样会很好,并且省去一些努力。

我肯定会为js使用数组而不是用逗号分割字符串。你最终会资助这个有用的东西,它会更具可读性。例如,您将能够添加如下文件:

if ($some_condition) $extra['js'] = 'accordion.js'; // add file
if ($some_other_condition) unset($extra['js']['accordion.js']); // remove file

然而,使用您当前的方法,您将使用字符串和逗号。您可以考虑在名为add_js()的模板类中编写函数。这很可能是我要做的。实际上,我这样做。我强烈推荐它。示例可能如下所示:

$this->template
    ->add_js('accordion.js') // add file
    ->remove_js('accordion.js'); // remove file

或者甚至可以这样:

$this->template->js[] = 'accordion.js';

然后在您的模板文件中,只需加载$this->template->js中的文件即可。我更喜欢使用函数的第一种方法。我也希望使用.js扩展名,因为我有一些.php文件和/或CI视图来加载实际上是javascript文件,但你可能不需要这个。 IMO让它更加清晰,消除了任何歧义。

最后,做适合您的工作。你没有违反任何规则或做任何坏事。就个人而言,我的模板库有点乱,但它多年来一直很好地为我服务,而且我不断改进它。考虑编写更多函数来处理设置部分,视图,javascript等。我认为这是大量使用,所以尽可能简单地在控制器中使用它。以后总是有时间进行重构。