要获得ploneform小部件呈现视图以更改小部件的布局,必须覆盖哪个模板

要获得ploneform小部件呈现视图以更改小部件的布局,必须覆盖哪个模板,plone,zope,dexterity,z3c.form,Plone,Zope,Dexterity,Z3c.form,我正在尝试覆盖Dextrity中的默认窗口小部件布局,其中标签、描述和输入区域位于三条单独的行上: Name The person's name [________________] 我希望字段以如下形式出现在表中: Name: [_____] 只有当有人在该区域上空悬停时,才会出现该人的姓名 我能够使用z3c.jbot成功覆盖plone.app.z3cform.templates.macros.pt;但是,对文件plone.app.z3cform.templates.widget.pt所做

我正在尝试覆盖Dextrity中的默认窗口小部件布局,其中标签、描述和输入区域位于三条单独的行上:

Name
The person's name
[________________]
我希望字段以如下形式出现在表中:

Name: [_____]
只有当有人在该区域上空悬停时,才会出现该人的姓名


我能够使用z3c.jbot成功覆盖plone.app.z3cform.templates.macros.pt;但是,对文件plone.app.z3cform.templates.widget.pt所做的更改不会影响我的定位。请参阅下面的更新

我找到的所有模板都要求每个单独的小部件使用一个名为@ploneform render widget的视图将自己呈现为一个带有标签和描述性文本的单个单元,但我找不到任何与该视图相关联的页面模板。有人能建议这些模板将在哪里吗

[更新:请注意,plone.app.z3cform中的templates.py包含以下内容,这可能意味着z3c.bjot被绕过: 小部件呈现模板需要是Zope3模板 类RenderWidgetViewMixInformetables,浏览视图: index=ViewPageTemplateFile'templates/widget.pt' 类RenderSingleCheckBoxWidgetViewMixInformTemplates,浏览视图: index=ViewPageTemplateFile'templates/singlecheckbox.pt'

因此,如果这是问题所在,那么必须采取什么措施使其与z3c.jbot兼容?]


谢谢。

好的,Martijn Pieters提供了我确信是很好的建议-使用css或者Javascript来实现这一点

让我来分享我的工作经历;希望人们会指出我在哪里使用旧东西,我在哪里不合适,等等。。。但这是一个起点:

在本地计算机上,我创建了一个名为project-css.css的文件,其中包含以下内容:

.z3cformInlineValidation {
 float: left;
 position: relative;
 display: inline-block;
 background: red;
}
.z3cformInlineValidation label {
 float: left;
 width: 15em;
 background: yellow;
 text-align: right;
}
.z3cformInlineValidation div {
 display: inline;
}
.z3cformInlineValidation input {
 float: left;
 background: pink;
}
.z3cformInlineValidation input[class~="int-field"] {
 background: purple;
 width: 2em;
至少在我的浏览器(不是IE)上,这样做的效果是,在右对齐标签之后,在z3cformInlineValidation类元素的内部放置一个input类型的元素,在一个以15个em空格开始的列中,放入任何包含标签和输入字段的框中。整数输入字段,由zope/plone/z3cform/dextrity/标记?对于class int字段,它们的大小减小,因此不会扩展到整个框。背景属性只是用来查看发生了什么,可以删除

转到zope管理界面,选择portal_skins,选择custom,从右上角Add按钮附近的下拉列表中选择File,然后单击Add。在生成的屏幕上,使用project-css.css作为id并上传文件project-css.css

转到zope管理界面,选择portal_css,滚动到底部,用project-css.css填充id字段。然后单击添加

我相信CSS会重新安排所有灵巧默认的表单输出

为了限制它,使其仅由我的表单使用,我发现门户中包含了一个条件语句,用于project-css.css。像这样的css可以工作,完整表达式周围没有引号

python: request.URL.endswith('end_of_applicable_url') 
我相信还有更合适的方法,如果有人能指出,我将不胜感激


正如我上次访问Zope/Plone时一样,我发现这些功能非常吸引人,但是文档虽然有了很大的改进,但似乎仍然遗漏了初学者快速掌握速度所需的一两个小魔术,可能是因为它们对日常使用该产品的人来说非常明显。

一件似乎有效的事情是编辑macros.pt文件plone.app.z3cform.templates.macros.pt,这样它就不再调用@ploneform render widget,而是直接执行plone.app.z3cform.templates.widget.pt中列出的一组任务。从那里,可以编辑HTML框架,为每个小部件和标签创建一个单行表。进一步的编辑应该允许一个集合中的所有小部件进入一个表中。plone.app.z3cform.templates.widget.pt是@ploneform render widget视图使用的模板,因此我猜z3c.jbot一定是因为某种原因而不适用于它,但我不知道为什么不适用。我会使用CSS,或者使用一些JS;进一步的研究表明,plone/app/z3cform.py包含以下内容,因此我认为这些模板不是按属性拉入的。不幸的是,我仍然很困惑,我不确定应该更改什么以使这个特定的页面模板成为类属性:小部件呈现模板需要是Zope 3模板类RenderWidgetViewMixInformationTemplates,BrowserView:index=ViewPageTemplateFile'templates/widget.pt'