2013-01-03 58 views
2

我創建了一個敏捷產品,其中包括容器和非容器敏捷內容類型。發現了collective.documentviewer(yay!thanks!huzzah!)後,我想使用它的dvpdf-group-view,但是在ZCML中註冊爲文件夾,而我的敏捷容器不符合要求。我查看了我的容器類型上可用的Web界面,添加了SiteRoot,並且啓用了視圖,但也完全錯誤。如何讓Plone敏捷容器看起來像Archetypes文件夾

我相信有一個正確的方法可以做到這一點,我很確定它是整個適配器/接口機制的核心,但我無法在任何書中找到它。

有人試圖解釋一下嗎?首先,可以讓敏捷容器假裝它也是一個文件夾的行或兩行;其次,如何更改敏捷類型的單個實例的默認視圖,以便呈現外部組件的視圖?

謝謝。

回答

4

1.註冊靈巧容器太

視圖註冊爲原型文件夾界面(Products.CMFCore.interfaces._content.IFolderish)的觀點,但你的靈巧容器不提供此接口(但plone.dexterity.interfaces.IDexterityContainer)。 原因可能是產品和/或視圖與靈巧不兼容。

安韋,你可以通過把在configure.zcml有點ZCML在你的包也註冊的View的IDexterityContainer接口(另見Dexterity Developer ManualCreating a package部分)自己試一下:

<configure 
    xmlns="http://namespaces.zope.org/zope" 
    xmlns:browser="http://namespaces.zope.org/browser"> 

    <configure package="collective.documentviewer"> 

     <browser:page 
      name="dvpdf-group-view" 
      for="plone.dexterity.interfaces.IDexterityContainer" 
      class=".views.GroupView" 
      template="templates/group-view.pt" 
      permission="zope2.View" 
      layer=".interfaces.ILayer" /> 

    </configure> 

</configure> 

collective.documentviewer configure.zcml複製<browser:page>,但我已將界面for=更改爲靈巧容器界面,以便此視圖也適用於敏捷容器。

<configure package="collective.documentviewer">告訴配置應該彷彿configure.zcml中將直接在collective.documentviewer應用的ZCML分析器 - 這允許您例如使用原來的模板(否則你就必須將它複製或做一些噁心的事物)。

我沒有自己測試它:它可能仍然是該視圖需要一個原型容器,並不適用於一個靈巧的容器。也可能是你必須從文檔查看器註冊更多的組件(可能是菜單?看看original configure.zcml中註冊的內容。

如果一切正常,你應該考慮在集體中進行更改。直接向github提交文檔查看器,並向作者提出一個拉動請求(請注意靈巧不是plone-core)但是首先詢問是否以及如何執行該操作:-)

2.更改默認視圖

使用plone,可以爲特定類型定義多個視圖。然後可以在此類型的每個實例的顯示菜單中選擇該視圖。如果您打開http://localhost:8080/Plone/portal_types/manage_main並點擊您的類型,則會出現一個字段Available view methods,您可以在其中單獨添加視圖名稱(dvpdf-group-view)。

創建類型的新對象或訪問現有類型之後,您將看到一個「顯示」菜單,其中應列出視圖。選擇它並且此對象現在具有此視圖作爲默認值。 (如果你想讓視圖在這種類型的其他對象上不可選擇,你可以從類型配置中刪除它,這樣它就不再可選 - 對象的現有配置將保持不變)。

+0

這些說明很完美 - 謝謝!我曾看到但忘記了您可以將外部產品的配置說明放入您的本地configure.zcml中。 – mjtrac

+0

(編輯超時。)這些說明很完美 - 謝謝!該視圖現在可以工作,並可以通過承諾的顯示菜單進行實例翻轉。我曾看到但忘記了您可以將外部產品的配置說明放入您的本地configure.zcml中。我很樂意對collective.documentviewer的副本進行更改;我正確的說,功能改變只是將一個空格分隔的「plone.dexterity.interfaces.IDexterityContainer」添加到視圖的「for」行?需要對敏捷容器進行哪些額外的測試? – mjtrac

+0

不客氣:)將IDexterityContainer添加到同一個ZCML標籤將不起作用 - 在這種情況下,for只能包含一個單獨的接口(在其他標籤中可能有多個空間分隔的值,例如)。添加一個額外的 -tag應該可以完成這項工作 - 但所有與靈巧相關的事情都應該在zcml:condition =「installed plone.app.dexterity」內(請參閱[here](http://stackoverflow.com/問題/ 1596611 /什麼是有效條件爲zcmlcondition)在zcml條件),所以它仍然工作沒有靈活性,但原型。 – jone

相關問題