迅睿 CMS 插件与模板的交互:控制器如何把数据传给视图
摘要
写了插件、改了模板,但页面上的数据没变?多数时候是数据传递的环节没接上。标准的传递方式// 控制器 public function index() { $data = [ 'list' => $list,
写了插件、改了模板,但页面上的数据没变?多数时候是数据传递的环节没接上。
标准的传递方式
// 控制器
public function index() {
$data = [
'list' => $list,
'total' => $total,
];
return dr_view('index', $data);
}dr_view() 的第二个参数是数组,键名在模板里直接当变量用。
模板里的接收方式
{loop $list $item}
<li>{$item.title}</li>
{/loop}
共 {$total} 条注意 {loop} 是迅睿的循环标签,和 {foreach} 不同,别混着写。
数据没传到模板的三种情况
- 键名覆盖——控制器里用了和系统保留变量同名的键(如
title、id),被系统值顶掉了。建议自定义数据加前缀。 - 没有 return——方法写了
dr_view()但忘了return,视图不渲染。 - 缓存没清——模板改了但缓存里还是旧输出。
插件里怎么影响已有页面
不改控制器,只在插件里挂钩子追加数据:
'module_view_before' => function ($data) {
$data['extra'] = '来自插件';
return $data;
}前提是模板里确实输出了 {$extra},否则数据传了也没人用。插件和模板必须成对修改,单独改一边不会生效。
所属专题
2026年10月20日 15:00
前后30天 · 点日期看归档
9月20日
9月21日
9月22日
9月23日
9月24日
9月25日
9月26日
9月27日
9月28日
9月29日
9月30日
10月1日
10月2日
10月3日
10月4日
10月5日
10月6日
10月7日
10月8日
10月9日
10月10日
10月11日
10月12日
10月13日
10月14日
10月15日
10月16日
10月17日
10月18日
10月19日
10月20日
10月21日
10月22日
10月23日
10月24日
10月25日
10月26日
10月27日
10月28日
10月29日
10月30日
10月31日
11月1日
11月2日
11月3日
11月4日
11月5日
11月6日
11月7日
11月8日
11月9日
11月10日
11月11日
11月12日
11月13日
11月14日
11月15日
11月16日
11月17日
11月18日
11月19日