0

Plone 4.2 (4.0.1 から) にアップグレードし、テーマ製品を XDV から Diazo に移行しています。

オーバーレイからカスタム ページ テンプレートにフォームを送信すると、結果のページが「プレーン」になるバグが発生しました。「プレーン」とは、表示されるコンテンツがメイン コンテンツ エリアのみであること、plone ナビゲーション、ロゴがないこと、スタイル シートが存在しないことなどを意味します。このページに渡された「情報」メッセージがあり、それがレンダリングされますページの上部 (ただし、plone またはテーマ スタイルでスタイル設定されているものはありません)。ターゲット ページが Plone スペースの外に完全にレンダリングされるようなものです。

rules.xml に追加して、対応する ajax_load = python: request.form.get('ajax_load') をテーマ コントロール パネルの [詳細設定] セクションのパラメーターに追加しようとしました。ただし、オーバーレイはまだテーマ化されており、フォームのターゲット ページはまだ「プレーン」です (「テーマ化されていない」とは言いません。テーマ化されていない Plone ページでさえ、基本的なロゴ、ナビゲーションなどをまだ持っているからです)。

また、オーバーレイ テンプレートにこの ID のアイテムを追加して貼り付けようとしましたが、オーバーレイは引き続きテーマ化されます。

テーマルールを使用しています

オーバーレイがテーマのままである理由と、これが問題の一部であるかどうかわかりませんか? また、フォーム ターゲット ページ テンプレートが「プレーン」にレンダリングされる理由も不明です。

同じフォームを(オーバーレイからではなく)通常どおり送信すると、ターゲットページは適切にテーマ化されてレンダリングされます...

これをデバッグするためのヒントは大歓迎です。

Plone 4.2.0.1 と plone.app.theming 1.1a2 を使用しています。私のテーマはファイル システム ベースです。


編集:私のオーバーレイフォームのいくつかは正しく機能しています。違いは、フォーム アクションの場所にあるようです。

form tal:attributes="action request/URL" - 正常に動作します

form tal:attributes="action string:${context/absolute_url}/@@view" - オーバーレイ フォームから呼び出された場合、最初のレンダリングで「プレーンな」ページが表示されます (上記で説明したように、同じフォームから呼び出された場合は問題ありません)。オーバーレイで)

「プレーンな」ページ html は次のようになることに注意してください (ベースの Plone や Theme ヘッドが含まれていないことに注意してください):

<!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>
...

また、テーマ製品を完全にアンインストールしようとしましたが、バニラ plone のこれらの特定のオーバーレイ フォームから同じ動作が見られます...

4

1 に答える 1

2

JavaScript .prepOverlay() 呼び出しを使用して ajax オーバーレイを設定している場合、AJAX 経由で使用されるクエリ文字列の一部として ajax_load フラグが自動的に追加され、オーバーレイに表示されるコードが取得されます。

ajax_load の機能の説明については、 http: //pypi.python.org/pypi/plone.app.jquerytools/1.5#ajax を参照してください。簡単に言えば、サーバーはコンテンツ領域以外のすべてを削除します。目的は、ページ内に既に表示されているオーバーレイに不要なページ パーツを読み込まないようにすることです。

ロードするフォームがそれ自体に投稿する場合 (非常に一般的な Zope/Plone の慣行)、ajax_load パラメーターはフォーム アクション URL にある可能性があります。したがって、コンテンツ領域のみが返されます。

そのため、フォーム アクションを設定する前に、URL のクエリ文字列から「ajax_load」を確実に取り除くために、カスタム フォーム テンプレートでいくつかの作業を行う必要があります。また、「ajax_load」の隠し入力をフォームから取り除きます。

于 2012-09-27T17:47:53.767 に答える