Diazo: окна не накладываются на стиль в Plone

Я обновляюсь до Plone 4.2 (с 4.0.1) и перемещаю свой тематический продукт с XDV на Diazo.

Возникла ошибка, из-за которой, когда я отправлял форму из наложения в пользовательский шаблон страницы, результирующая страница была «простой». Под «простым» я подразумеваю, что единственным видимым содержимым является основная область содержимого, нет навигации plone, логотипа, нет ни одной из таблиц стилей и т. д. На эту страницу передается информационное сообщение, которое отображается в в верхней части страницы (ничего не оформлено в стиле plone или темы). Это похоже на то, что целевая страница отображается за пределами пространства Plone.

Я попытался добавить в свой rules.xml и добавить соответствующий ajax_load = python: request.form.get('ajax_load') к параметрам в разделе «Дополнительные настройки» панели управления темами. Тем не менее, оверлей по-прежнему тематический, а целевая страница формы по-прежнему «простая» (я не буду говорить «нетематическая», поскольку даже нетематическая страница Plone по-прежнему имеет базовый логотип, навигацию и т. д.).

Я также попытался добавить и вставить элемент с этим идентификатором в свой шаблон оверлея - оверлей по-прежнему становится тематическим.

Я использую правило темы

Не знаете, почему оверлеи остаются тематическими и является ли это частью проблемы? Также не уверен, почему шаблон целевой страницы формы отображается «простым».

Если я отправлю ту же форму в обычном режиме (не из оверлея), целевая страница будет правильно оформлена...

Любые советы по отладке этого будут очень благодарны.

Я использую Plone 4.2.0.1 и plone.app.theming 1.1a2, моя тема основана на файловой системе.


Изменить: OK, некоторые из моих оверлейных форм работают правильно. Разница, кажется, в том, где действие формы:

form tal:attributes="запрос действия/URL" - работает нормально

form tal:attributes="action string:${context/absolute_url}/@@view" - дает мне "простую" страницу при первом рендеринге при вызове из оверлейной формы (как обсуждалось выше, нормально, когда вызывается из той же формы, а не в накладке)

Обратите внимание, что «простой» HTML-код страницы выглядит следующим образом (обратите внимание на отсутствие базовых включений Plone или заголовка темы):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><base href="http://localhost:8080/Plone/sectionfoo/sectionbar/mypage" /><!--[if lt IE7]></base><![endif]--></head>
<body class="template-view portaltype-myCustomType site-Plone section-sectionfoo icons-on havePortlets haveLeftPortlets haveRightPortlets" dir="ltr">
<h1 class="documentFirstHeading">Why is this page plain?</h1>
...

Я также попытался полностью удалить свой тематический продукт - я все еще вижу то же поведение этих конкретных оверлейных форм в vanilla plone...


person Aaron Williams    schedule 25.09.2012    source источник
comment
Можете ли вы показать нам (хотя бы часть) код из вашего шаблона? Не удается загрузить ресурсы или просто не ссылается на них вообще? Отличается ли URL-адрес страницы при ее отправке из оверлея?   -  person David Glick    schedule 25.09.2012


Ответы (1)


Если вы используете вызов JavaScript .prepOverlay() для настройки оверлея ajax, то он автоматически добавит флаг ajax_load как часть строки запроса, используемой через AJAX для получения кода, отображаемого в оверлее.

См. http://pypi.python.org/pypi/plone.app.jquerytools/1.5#ajax для объяснения того, что делает ajax_load. Короче говоря, сервер удаляет все, кроме области содержимого. Цель состоит в том, чтобы избежать загрузки ненужных частей страницы в оверлей, который уже отображается внутри страницы.

Если форма, которую вы загружаете, отправляет саму себя (очень распространенная практика Zope/Plone), то параметр ajax_load может быть в URL-адресе действия формы. Таким образом, вы получаете только возвращенную область содержимого.

Итак, вам нужно будет проделать некоторую работу в своем пользовательском шаблоне формы, чтобы убедиться, что вы удалили «ajax_load» из строки запроса URL-адреса, прежде чем устанавливать действие формы. Кроме того, удалите любой скрытый ввод «ajax_load» из формы.

person SteveM    schedule 27.09.2012
comment
Спасибо, Стив, определенно нет ajax_load в действии формы или скрытых полях. - person Aaron Williams; 28.09.2012
comment
Работает нормально при отправке самому себе ... просто взрывается при публикации в другую цель, например form tal:attributes="action request/URL" - работает нормально form tal:attributes="action string:${context/absolute_url}/@@view" генерирует простую страницу после отправки. Я не вижу параметр ajax_load в self.request.URL, есть ли где-то еще, что я должен проверить, чтобы найти его? Я использую pdb... Примечание: эти оверлейные формы отлично работали на Plone 4.0.1, эта ошибка началась, когда мы обновились до Plone 4.2. Ваше здоровье - person Aaron Williams; 28.09.2012
comment
Хорошо, я нашел 'ajax_load' в self.request.keys(), а затем он все еще установлен, когда форма отправляется из оверлея. Похоже на обходной путь, но должен ли я попытаться удалить это при разборе формы? Любые советы о том, как это сделать? Я не мог легко удалить self.request['ajax_load'] с помощью pdb, поскольку self.request идентифицируется как тип «экземпляр», и я не вижу способа удалить его через dir(self.request)? - person Aaron Williams; 28.09.2012
comment
Я сильно подозреваю, что проблема заключается в скрытом входе, упомянутом в конце ответа. Можете ли вы проверить форму, отображаемую в оверлее, и посмотреть, есть ли в ней скрытый ввод с именем ajax-load? Если это так, вероятно, это то, что мы должны исправить в поддержке оверлеев. Вероятно, не следует добавлять этот ввод в любую форму, которая не настроена для публикации ajax. - person SteveM; 28.09.2012
comment
Ты прав, спасибо, Стив. Ранее я говорил, что в оверлее не было скрытого поля формы ajax_load, но теперь я вижу, что оно действительно есть. Моя тема сейчас отключена, так что, возможно, я не мог видеть ее раньше ... так что да, она определенно присутствует в форме наложения. Любые советы о том, как я могу удалить его - jquery? - person Aaron Williams; 02.10.2012