какой шаблон необходимо переопределить, чтобы получить представления ploneform-widget-render для изменения макета виджета

Я пытаюсь переопределить макет виджета по умолчанию в Dexterity, где метка, описание и область ввода находятся в трех отдельных строках:

Name
The person's name
[________________]

Вместо этого я хотел бы, чтобы поля отображались в таблице с формой:

Name: [_____]

с «Именем человека», появляющимся (если вообще) только тогда, когда кто-то наводит курсор на область.

Я могу успешно переопределить plone.app.z3cform.templates.macros.pt, используя z3c.jbot; однако изменения в файле plone.app.z3cform.templates.widget.pt не имеют никакого эффекта, который я могу обнаружить. (См. обновление чуть ниже.)

Все шаблоны, которые я нахожу, просят каждый отдельный виджет отображать себя как единое целое с меткой и описательным текстом, AFAICT, используя представление под названием @@ploneform-render-widget, но я не могу найти какие-либо шаблоны страниц, связанные с этим представлением. . Кто-нибудь может подсказать, где такие шаблоны?

[Обновление: Обратите внимание, что templates.py в plone.app.z3cform включает следующее, что, вероятно, означает, что z3c.bjot обойден: # Шаблоны рендеринга виджетов должны быть классом шаблонов Zope 3 RenderWidget(ViewMixinForTemplates, BrowserView): index = ViewPageTemplateFile ('templates/widget.pt') class RenderSingleCheckboxWidget(ViewMixinForTemplates, BrowserView): index = ViewPageTemplateFile('templates/singlecheckbox.pt')

Итак, если это проблема, что нужно сделать, чтобы сделать это совместимым с z3c.jbot?]

Спасибо.


person mjtrac    schedule 16.11.2012    source источник
comment
Одна вещь, которая, кажется, работает, — это отредактировать файл macros.pt (plone.app.z3cform.templates.macros.pt), чтобы он больше не вызывал @@ploneform-render-widget, а вместо этого напрямую выполнял набор задач, перечисленных в plone.app.z3cform.templates.widget.pt. Оттуда становится возможным редактировать структуру HTML, чтобы создать таблицу с одной строкой для каждого виджета и метки. Дальнейшие правки должны позволить всем виджетам в наборе попасть в единую таблицу.   -  person mjtrac    schedule 17.11.2012
comment
plone.app.z3cform.templates.widget.pt — это шаблон, используемый представлением @@ploneform-render-widget, поэтому я предполагаю, что z3c.jbot не должен работать для него по какой-то причине, но я не знаю почему. .   -  person David Glick    schedule 17.11.2012
comment
Я бы сделал это с помощью CSS и, возможно, JS; можно сделать и с диазо.   -  person Martijn Pieters    schedule 17.11.2012
comment
Дальнейшее исследование показывает, что plone/app/z3cform.py включает в себя следующее, поэтому я полагаю, что эти шаблоны не загружаются по атрибуту. К сожалению, я все еще настолько запутался, что не уверен, что следует изменить, чтобы сделать этот конкретный шаблон страницы атрибутом класса: ('templates/widget.pt')   -  person mjtrac    schedule 22.11.2012


Ответы (1)


OK, 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 в качестве «идентификатора» и загрузите файл project-css.css.

Перейдите в интерфейс управления zope, выберите portal_css, прокрутите вниз и заполните поле «id» проектом-css.css. Затем нажмите «Добавить».

Я полагаю, что CSS затем переупорядочит все выходные данные формы Ловкости по умолчанию.

Чтобы ограничить его, чтобы он использовался только моей формой, я нашел оператор условия, включенный в portal_css для работы project-css.css (вокруг полного выражения нет кавычек)

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

Я уверен, что есть более подходящие способы, и я был бы признателен, если бы кто-нибудь указал на них.

Как и в прошлый раз, когда я посещал Zope/Plone, я нахожу эти возможности заманчивыми, но документация, хотя и НАМНОГО улучшенная, по-прежнему, кажется, упускает из виду одну или две маленькие волшебные вещи, которые нужны новичку, чтобы быстро освоиться, вероятно, потому, что они настолько очевидны для тех, кто использует продукт каждый день.

person mjtrac    schedule 26.11.2012