对视图层(view)扩展

2014-09-01 15:13:29
王春生
15949
最后编辑:王春生 于 2014-09-01 16:50:47
简介:视图文件的扩展分为两种方式,一种是完全覆盖,第二种是通过钩子机制来扩展。

视图文件的扩展分为两种方式,一种是完全覆盖,第二种是通过钩子机制来扩展。

一、完全覆盖

视图文件的覆盖可以通过完全覆盖的方式来重新定义。比如我对bug模块的create页面进行扩展。原来的视图文件是存放在module/bug/view/create.html.php。如果需要对其进行扩展,只需要将这个create.html.php拷贝到module/bug/ext/view/create.html.php,然后对这个网页进行修改就可以了。

需要 注意 拷贝 过去 时候, 包含 路径 相应 改动。

二、通过钩子进行扩展

第一种方法比较简单,也比较直观,但有它的缺点,就是代码无法重用。假设后面版本有了新的改动之后,老版本的视图文件和新版本的程序就有可能不兼容。所以可以考虑通过钩子脚本来实现代码的重用。钩子脚本的命名规则为方法名. 扩展名.html.hook.php。该钩子文件会在整个模板加载完之后加载,在里面可以执行相应的php代码,或者js代码。这样就提供了一种通过js来动态修改页面元素的机制,从而达到对页面元素的完全控制。

比如misc/ext/view/getsid.color.html.hook.php

$('#topbar').css('color', 'red');
通过上面这段js代码,实现了对顶部导航条的加红显示。
评论列表
小白 2018-12-03 14:33:57
请问下,用完全覆盖的方式扩展视图,红字说的“需要 注意 的 是 拷贝 过去 时候, 包含 路径 要 做 相应 的 改动”,指的是改哪个路径,需要做怎样的改动?
王春生 2018-12-10 09:07:44
include的公用头文件的路径要修改。
彭先生 2017-12-28 17:02:57
同时扩展pc端和移动端,应该怎么区分目录,要求是扩展,不修改原来的自带文件,请给出路径提示,谢谢
王春生 2017-12-29 08:43:42
pc端和移动端的模板文件本来是分开的。
王春生 2017-12-29 08:52:31
判断终端的类型,然后调用不同的模板文件。可以看一下我们蝉知里面的逻辑。www.chanzhi.org
咕噜咕噜 2017-10-25 20:10:47
问下,我要对message前台页面进行扩展,不通过后台编辑主题的方式,直接在template的message里面加个ext扩展可以吗?我现在在template的message里面加个ext扩展文件夹,ext里面包含css和js还有*.html.php,但是访问地址确是ext外面的*.html.php ,是怎么回事?具体要怎么操作?
王春生 2017-10-26 09:27:10
前台的模板是单独分目录放的。
咕噜咕噜 2017-10-26 09:51:33
前台模板目录就是放到那个template吧,能不能支持用ext扩展呢
王春生 2017-10-27 14:55:55
可以。
Candy 2017-04-21 11:26:23
发送邮件的接口 不支持 群发邮件吗
王春生 2017-04-25 08:24:20
你可以自己做个邮件列表。发信到邮件列表就可以。
幽你一默 2016-03-25 10:04:54
如果需要修改www\template\default\view下的模板文件,该如何扩展?
王春生 2016-03-25 11:33:53
蝉知的吧?蝉知的还是放在system/module/对应的模块下面的ext/view。
幽你一默 2016-03-28 09:00:20
折腾了半天才发现,原来default下的模板文件扩展方式和module的模板扩展不一样,default是直接在相应模块下建立ext文件夹,然后直接把扩展的模板文件放进去(没有view层),而且跟module那边没关系。
Mr. w 2016-03-11 14:21:23
用户登录时勾选“保持登录”,进入登录界面后点击“退出”,然后会自动转跳到登录页面,此时URL为:/index.php?m=user&f=login;如果把URL改为/index.php,用户又变成登录状态了。不知道这个算不算问题。
王春生 2016-03-11 16:04:27
是这样设计的。
Mr. w 2016-03-12 10:01:43
我觉得这不科学。这种情况下用户只能清除cookies才能注销登录。应该说是相当不安全。
wolfg1969 2016-02-17 17:47:42
钩子扩展里使用 php 代码能改变模板内容吗?
王春生 2016-02-18 08:41:02
可以用js和css来动态控制。html代码是无法修改了,因为已经渲染过了。:)
wolfg1969 2016-02-18 09:05:20
谢!已实现。
Mr. Sky 2015-08-12 17:08:01
7.2.5版本:视图的钩子扩展规则是否已经改变,按此钩子扩展规则已经无效。实际扩展方式以变为 【扩展名.*.html.hook.php】
1/1
发表评论
评论通过审核后显示。