4

私は空の Plone 4.1 サイトに collective.quickupload をインストールしましたが、quickupload ポートレットを追加すると、kss がフィールド検証 (plone.app.form.kss) を呼び出し、getSite 関数が FormlibValidation オブジェクトを返すことに気付きました。 quickupload 語彙がクラッシュします。

トレースバックはこちら: http://pastebin.com/nvwChpZd

私の質問は:

  • これ (getSite 関数が FormlibValidation オブジェクトを返す) はバグですか、それとも意図した動作ですか?

  • collective.quickupload を修正/回避/機能させるための解決策は?

4

1 に答える 1

4

getSite() は最も近いコンポーネント サイト (ローカル ユーティリティを格納できる場所) を返します。これは、setSite() で最後に設定されたものを意味するだけで、通常はトラバーサルで発生します。

ほとんどの場合、setSite() を呼び出す唯一のトラバーサル フックは、Plone サイトをトラバースするときにトリガーされるものです。しかし、古い KSS インライン フォーム検証機構は、オンザフライで (ビューで) ローカル コンポーネント サイトを作成し、それをリクエストの残りの部分でローカル サイトとして設定するハックを使用 (使用?) して、特定のものを上書きできるようにしていると思います。もの。

検証を無効にする (たとえば、portal_kss 内の関連する KSS ファイルを無効にする) か、c.quickupload を修正して、getSite() の結果が ISiteRoot であるかどうかを確認できます。そうでない場合は、取得ラップする必要があるため、 aq_parent(site) (またはおそらく site.parent ) を実行して、ISiteRoot が見つかるまで親をループで取得できます

于 2011-09-19T07:41:49.760 に答える