我正在使用以下模板库。我想做的是在模板中加载一个或多个上部视图,作为一个数组,这样我就可以使用for each循环轻松地将它们加载到模板中。
这是一个如何在控制器上使用的简单示例:
function index() {
$data['title'] = 'My page title';
$partials = array('content'=>'c_location'); //Load view about inside the template.
$this->template->load('main', $partials, $data);
}
在视图上,你有一个类似于html的:
<html>
....
<?=$content?>
...
</html?>
这是我尝试使用的:控制器:
$partials = array('content'=>'c_location',
array(
'first_upper_content'=>'1_u_location','second_upper_content'=>'2_u_location'
)
);
例如,我可以传递upper_content,一个顶部标题为"first_upper_content",一个幻灯片为"second_upper_content",然后传递其余内容为"content"。
Html:
...
<?=$upper_content?>
<--if upper_content is a array,
I could display each content with a for loop-->
<?=$content?>
当我尝试我得到的一切:
消息:pathinfo()期望参数1为字符串,给定的数组
文件名:core/Loader.php
线路编号:759
我该如何实现?我正在考虑修改
//将视图加载到var数组中
在模板内部。hp&在html中添加foreach循环;
这就是您想要的:
// Load views into var array
foreach(array_flat($view) as $key => $file)
在Template.php中包含"array_folat"函数调用,如上所示。
您需要定义此函数。您可以在任何自动加载的帮助程序中执行此操作,甚至可以将其包含在自己的Template类中(在这种情况下,您应该在上面的代码中将其称为$this->array_flat
)。给你:
function array_flat($array)
{
$result = array();
foreach ($array as $key => $value)
{
if (is_array($value))
{
$result = array_merge($result, array_flat($value));
}
else
{
$result[$key] = $value;
}
}
return $result;
}
您想要做的事情在该库中是不可能的。
您收到的错误表明CI Loader类正在传递无效数据。因此,看看库的加载函数,你的代码就会在这里失败:
// Load views into var array
foreach($view as $key => $file)
{
$tpl[$key] = $this->CI->load->view($file, $vars, TRUE);
}
库将$partials
中的嵌套数组直接传递给CI加载器。有了你的数据,这条线就变成了:
$tpl[0] = $this->CI->load->view(array(
'first_upper_content'=>'1_u_location','second_upper_content'=>'2_u_location'
), vars, TRUE);
您可以在CI用户指南中看到无效的内容。在我看来,你的选择是要么彻底改革图书馆,要么改变你的方法。
只需制作主模板视图,并在其中包含以下内容:
$this->load->view('header');
if (is_array($page) {
foreach($page as $key=>$val){
$this->load->view($key, $val); // $val being optional parameters
}
} else {
$this->load->view($page);
}
$this->load->view('footer');
在控制器中,$data['page']
将包含视图信息,可以是其名称(字符串),也可以是要按顺序调用的名称数组。当然,您必须使用这些名称预先制作好视图。
这是我的想法,但它应该做你想做的事。这是在没有模板库的情况下完成的,只有普通的CI。
要加载部分,只需要使用:
$this->load->view('partial_location',$data);
您的主视图内部。因此,如果你有一个名为home_page.php的主视图,并且你想加载页眉和页脚的部分,你可以使用:
$this->load->view('header');
// Main page layout
$this->load->view('footer');
如果你想在你的部分中使用自定义或不同的数据,只需在你的控制器中定义它们:
$data = array(
'content' => 'about',
'header_content' => 'Welcome to the site!',
'footer_content' => 'Made by me!'
);
在您的主视图文件中:
$this->load->view('header',$header_content);
// would echo 'Welcome to the site!'
echo $content;
// would echo 'about'
$this->load->view('footer',$footer_content);
// would echo 'Made by me!'