到目前为止,我一直喜欢使用CodeIgniter来创建一些简单的Web应用程序(实际上只是学习框架),但我无法找到一种简单的方法来创建块/模块.
我希望有"最近的图像"块,我可以放在网站的任何页面上,而不会在每个页面的控制器中复制查询并将其传递给带有$ vars的模板.
2个问题:
这似乎应该很简单,我只是没有运气找到适当的解决方案.提前致谢.
好的,这是我对"小部件","模块","部分视图"或任何你想称之为的看法.无论哪种方式,我们指的是页面的可重用项目.
有很多不同的方法可以做到这一点,所以我的方式可能不适合你 - 然后它可能就是你正在寻找的东西!
首先,我将小部件视为视图,假设路径如下:views/widgets/myview.php
我决定在我的控制器中使用哪些小部件.我的方法是将路径放到我想要的视图中,如:
$data['widgets'] = array('widgets/myview', 'widgets/myview2');
Run Code Online (Sandbox Code Playgroud)
然后当我加载我的主视图(仍在我的控制器中)时,我这样做:
$this->load->view('main_view', $data);
Run Code Online (Sandbox Code Playgroud)
现在,小部件数组被传递到主视图.
然后在我的主视图中,当我到达小部件去的地方时,我像这样遍历我的数组:
foreach ($widgets as $widget)
{
$this->load->view($widget);
}
Run Code Online (Sandbox Code Playgroud)
此循环在我的主视图中运行.方便的是,传递给主视图的所有数据都将在您加载的嵌套视图中可用.
我在Codeigniter中以这种方式制作了许多小部件,这也是我在CMS中使用的方法.
偏爱是什么意思?CodeIgniter中没有本机部分视图.虽然,你可以$this->load->view()在意见中.
如果您正在讨论控制器中可用于加载的所有视图的变量,您应该:
$data['info'] = 'value';
$this->load->vars($data);
Run Code Online (Sandbox Code Playgroud)
$info 然后可用于您加载的所有视图.
更新:
您需要在构造函数中执行此操作:
class Page extends Controller {
function Page()
{
$this->load->model('page');
$data['images'] = $this->page->get_images();
$this->load->vars($data);
// images will now be available to all views
}
}
Run Code Online (Sandbox Code Playgroud)
更新2:
我必须承认我没有使用过模板,但这适用于控制器创建的所有页面.
| 归档时间: |
|
| 查看次数: |
10884 次 |
| 最近记录: |