对视图层(view)扩展

2014-09-01 15:13:29
王春生
33722
最后编辑:朱金勇 于 2023-03-20 08:56:01
分享链接
摘要:视图文件的扩展分为两种方式,一种是完全覆盖,第二种是通过钩子机制来扩展。

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

一、完全覆盖

视图文件的覆盖可以通过完全覆盖的方式来重新定义。比如我对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代码,实现了对顶部导航条的加红显示。


注意:本文档是针对禅道16.5版本之前的zentaoPHP框架,禅道最新版本的二次开发文档请参照新版:
https://devel.easycorp.cn/book/extension-new/intro-52.html

评论列表
小y 2023-02-23 17:20:29
你好,请问下我用完全覆盖的方式,新建module/bug/ext/view/create.html.php然后没有写内容,但是页面加载的还是module/bug/view/create.html.php的内容。我修改module/bug/view/create.html.php里面的内容页面是可以刷新的。为什么框架没有加载module/bug/ext/view/create.html.php里面的内容呢?
胖哥 2022-05-15 15:30:54
html,css,js 用php生成的说明文档能否发一份?
后吧 2021-03-05 10:20:19
请问一下禅道的条件搜索框怎么调用,我看代码好像是id带有querybox就会显示了,可是我在新的模块里面试了一下不行诶
王春生 2021-03-10 09:01:37
搜索功能比较复杂的,不仅仅是一个表单。还有control层和model层的支持。
马轩 2019-10-22 11:47:45
控制器里面的方法怎么直接接收视图中a链接传递过来的参数,不是通过映射到函数的参数,直接在函数里面接收参数。
刘梦洁 2019-08-17 15:02:55
禅道是不是用zui插件开发的,我用了zui的片段,样式没有生效?
王春生 2019-08-18 13:55:12
是用zui开发的。不过禅道里面使用的zui没有把所有的组件都包含进来。
nothing0000 2019-07-29 17:04:14
请问我要在bug中增加字段,类似“影响版本”这个字段,如何增加,多谢?
王春生 2019-07-30 11:57:11
需要了解我们的框架修改代码开发。
我们最新的企业版增加了工作流引擎,可以自定义添加。可以联系我们网站的销售试用下。
mmw 2019-05-14 18:01:52
我通过第一种方式对模板覆盖之后,升级之后会不会覆盖啊?还又数据库添加新的字段,升级的时候怎么才能不覆盖,把我添加的字段覆盖没有了?
王春生 2019-05-15 08:16:32
用扩展就不会。数据库结构你们新增的字段只要和我们不冲突就没事。
代学 2019-04-23 16:16:22
请问下,如果采用完全覆盖方式对视图层进行扩展,它对应的js是否也一定要扩展?
王春生 2019-04-23 16:34:22
看你的需要啦。控制权都是在你这里嘛。
zjc 2019-04-08 14:00:05
你好 ,现在的view的扩展,按照狗子扩展的规则,扩展方式有没有变化?按照上面说的做似乎无效,扩展名具体怎么写,钩子扩展的方法步骤现在是怎么样的?
zjc 2019-04-08 14:16:21
就是说钩子扩展的具体步骤是什么,有没有变化?命名的时候方法名,扩展名有需要注意的吗?先单独对view层写扩展文件应该是没有问题的吧?
王春生 2019-04-09 11:53:49
没有变化。注意目录和文件名大小写。
snail_chen 2019-03-17 20:43:07
请问如何控制页面上的必填项,我指的是在前端控制,不是在config里面设置字段。我对比了下页面上非必填项和必填项(带红色星号)的前端代码,没看出有啥区别。而且即使带了红色星号,只要config里面没设置,这个字段不填内容也可以提交请求。
snail_chen 2019-03-17 20:45:17
PS:我想问的是如何让某个文本框或下拉框后面带红色星号
王春生 2019-03-19 09:03:33
参考每个模块配置文件里面的requiredFiled设置。
王春生 2019-03-20 16:24:03
control层的代码有检查的。我们系统里面的检查都是在后端做的。然后返回检查结果到前端。
1/2
发表评论
评论通过审核后显示。