2012-09-25 92 views
0

我升級到Plone 4.2(從4.0.1開始),並將我的主題產品從XDV轉移到Diazo。Diazo:Plone沒有風格覆蓋窗口

當我將一個表單從疊加層提交到自定義頁面模板時,出現了一個錯誤,結果頁面是「普通」的。 「純」我的意思是唯一可見的內容是主要的內容區域,沒有plone nav,logo,沒有樣式表存在等等。有一個'info'消息傳遞給這個頁面,頁面的頂部(儘管沒有任何樣式的Plone或主題樣式)。這就像目標頁面完全呈現在Plone空間之外。

我已經嘗試添加到我的rules.xml中,並將相應的ajax_load = python:request.form.get('ajax_load')添加到主題控制面板「高級設置」部分中的參數中。然而,疊加層仍然是主題,並且表單目標頁面仍然是「普通」(我不會說'未受歡迎的',因爲即使是不受歡迎的Plone頁面仍然具有基本標識,導航等)。

我也試過在我的覆蓋模板中添加並粘貼一個帶有此ID的項目 - 覆蓋仍然是主題。

我現在用的主題規則

不知道爲什麼覆蓋保持爲主題,如果這是問題的一部分?也不知道爲什麼表單目標頁面模板呈現'普通'。

如果我(從覆蓋不)正常提交相同的形式,目標頁面正確呈現主題...

任何提示,調試這將是巨大的感謝。

我使用Plone 4.2.0.1和plone.app.theming 1.1a2,我的主題是基於文件系統。


編輯:好的一些覆蓋表格工作正常。所不同的似乎是個表單的動作是:

形式TAL:屬性= 「動作請求/ URL」 - 工程確定

形式TAL:屬性=「操作字符串:$ {背景/ 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> 
... 

我也是嘗試完全卸載我的主題產品 - 我仍然看到這些特定覆蓋形式在香草plone中的相同行爲...

+2

你能告訴我們(至少是部分)你的模板代碼嗎?它沒有加載資源,或根本沒有引用它們?從疊加層提交時頁面的URL是否有所不同? –

回答

2

如果您使用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」隱藏輸入從表單中除去。

+0

感謝史蒂夫,絕對沒有ajax_load形式的行動或隱藏的領域。 –

+0

工作正常時,發佈到自己...只是在發佈到不同的目標時炸燬,例如 '形式tal:屬性=「動作請求/ URL」 - 工作好 '形式tal:attributes =「動作字符串:$ { context/absolute_url}/@@ view「'提交後生成普通頁面。 我沒有看到在self.request.URL的ajax_load PARAM,有沒有別的地方我應該檢查找呢?我用PDB ... 注:用於在Plone的4.0.1做工精細這些疊加的形式,這個bug開始,一旦我們升級到Plone的4.2。 乾杯 –

+0

OK,我發現「ajax_load」在self.request.keys(),然後當表單從覆蓋提交它仍設置。看起來像一個解決方法,但我應該嘗試並刪除這個時,我解析表單?有關如何做到這一點的任何提示?我不能很容易地刪除self.request ['ajax_load']使用pdb作爲self.request標識爲類型'實例',我看不到一種方法通過dir(self.request)將其刪除? –