我是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));
}
}
问题
答案 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等。我认为这是大量使用,所以尽可能简单地在控制器中使用它。以后总是有时间进行重构。