1

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

Name
The person's name
[________________]

我希望字段出现在表格中,其形式为:

Name: [_____]

仅当有人悬停在该区域上时才会出现“该人的姓名”(如果有的话)。

我能够使用 z3c.jbot 成功覆盖 plone.app.z3cform.templates.macros.pt;但是,对文件 plone.app.z3cform.templates.widget.pt 的更改没有我可以找到的效果。(见下面的更新。)

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

[更新:请注意plone.app.z3cform中的templates.py包含以下内容,这可能意味着绕过了z3c.bjot:#小部件渲染模板需要是Zope 3模板类RenderWidget(ViewMixinForTemplates, BrowserView): index = ViewPageTemplateFile ('templates/widget.pt') 类 RenderSingleCheckboxWidget(ViewMixinForTemplates, BrowserView): index = ViewPageTemplateFile('templates/singlecheckbox.pt')

那么,如果这是问题所在,必须做些什么才能使其与 z3c.jbot 兼容?]

谢谢。

4

1 回答 1

0

好的,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 类的元素内)放在右对齐标签之后的效果,在大约 15 em 空格开始的列中放入包含标签和输入字段。由 zope/plone/z3cform/dexterity/? 标记的整数输入字段 使用“int-field”类的大小会减小,因此它们不会延伸到盒子上。“背景”属性只是用来查看发生了什么,并且可以删除。

进入zope管理界面,选择portal_skins,选择custom,从右上角“添加”按钮附近的下拉列表中选择“文件”,然后点击“添加”。在结果屏幕上,使用 project-css.css 作为您的“id”并上传文件 project-css.css

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

我相信,CSS 会重新排列所有 Dexterity 默认表单输出。

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

python: request.URL.endswith('end_of_applicable_url') 

我相信有更合适的方法,如果有人指出它们,我将不胜感激。

当我上次访问 Zope/Plone 时,我发现这些功能很诱人,但是文档虽然有了很大改进,但似乎仍然遗漏了初学者需要快速上手的一两个小魔法,可能是因为他们对于那些每天使用该产品的人来说是如此明显。

于 2012-11-26T21:47:50.343 回答