我一直在寻找一种灵活的方法来在不同的页面中生成不同的侧边栏。目标是将自定义链接传递到每个侧边栏。模板库对我的应用程序来说似乎有点过分,所以我开发了一个简单的解决方案。我不确定这是否是最好的解决方案。我的问题是你怎么看?非常感谢您的建议!
1 . 在你的控制器中添加一个私有函数来加载你的侧边栏视图:
/**
* The function has 2 arguments.
* $title is the sidebar widget title.
* $widget will contain an array of links to be added in the sidebar widget.
*/
private function sidebar($title, $widget)
{
$widget['title'] = $title;
$this->load->view('includes/sidebar', $widget);
}
2.在要加载自定义侧边栏的控制器函数中,调用私有函数sidebar()
并将所需的侧边栏数据传递给它。
下面是一个名为edit
用于编辑帖子的控制器函数。在示例中,我需要加载一个带有选项的侧边栏,以查看和删除我所在的帖子:
function edit($post_id = '')
{
//your code, form validation, etc...
//Prepare sidebar widget links
//Array key is link url, array value is link name
$widget['links'] = array (
'posts/single/' . $post_id => 'View post',
'posts/remove/' . $post_id => 'Remove post'
);
$this->sidebar('Options', $widget); //load sidebar
}
3.最后是显示从控制器传递的自定义数据的侧边栏视图:
<div id="sidebar">
<ul>
<li class="widget">
<div class="label"><?php echo $title; ?></div>
<ul>
<?php foreach ($links as $link => $value): ?>
<li><?php echo anchor($link, $value); ?></li>
<?php endforeach; ?>
</ul>
</li>
</ul>
</div>
结论
将以下代码添加到自定义侧边栏标题和链接的任何控制器函数中:
$widget['links'] = array (
'controller/function' => 'Link Name 1',
'controller/function' => 'Link Name 2',
'controller/function' => 'Link Name 3'
);
$this->sidebar('Widget Title', $widget);