2012-02-18 120 views
0

我試圖直接實現一個基本的Zope2內容類型,而不使用靈巧或原型,因爲我需要這非常精益。爲什麼我的內容對象不顯示在portal_catalog中?

from OFS.SimpleItem import SimpleItem 
from Products.ZCatalog.CatalogPathAwareness import CatalogAware 
from persistent.list import PersistentList 

class Doculite(SimpleItem, CatalogAware): 
    """ implement our class """ 

    meta_type = 'Doculite' 

    def __init__(self, id, title="No title", desc=''): 
     self.id = id 
     self.title = title 
     self.desc = desc 
     self.tags = PersistentList() 
     self.default_catalog = 'portal_catalog' 

    def add_tags(self, tags): 
     self.tags.extend(tags) 

    def Subject(self): 
     return self.tags 

    def indexObject(self): 
     self.reindex_object() 

從外部方法,我這樣做:

def doit(self): 
    pc = self.portal_catalog 
    res1 = pc.searchResults() 
    o1 = self['doc1'] 
    o1.add_tags(['test1', 'test2']) 
    o1.reindex_object() 
    res2 = pc.searchResults() 
    return 'Done' 

我清除目錄並運行我的外部方法。我的對象沒有進入目錄。但是從索引選項卡中,當我瀏覽主題索引時,可以看到我的內容項目與值一起列出。 res1和res2都是空的。

爲什麼我的內容項目沒有顯示該目錄的searchResuts()裏面?

回答

0

Plone的需要每個內容目的在於提供一種「allowedRolesAndUsers」指數在SearchResult所返回的對象。

有可能是一個ZCML片段,使這對我的內容類型。但我能夠通過添加另一種方法來工作,如下所示:

def allowedRolesAndUsers(self): 
    return ['Manager', 'Authenticated', 'Anonymous'] 
0

爲了在portal_catalog的「目錄」選項卡中看到您的對象,對象需要有一個返回表示其路徑的元組的「getPhysicalPath()」方法(例如('','Plone','myobject'))。 也可以嘗試使用此:

from Products.CMFCore.CMFCatalogAware import CMFCatalogAware 

爲基類。

+0

它是從SimpleItem派生的,所以實現了getPhysicalPath()。我也嘗試從CMFCatalogAware派生,但除了提供plone.indexer包裝(從CMFPlone.CatalogTool中的代碼路徑),它沒有什麼不同。 – sureshvv 2012-02-19 04:04:58

2

Plone的是全脂的內容管理系統,如果你的東西后,精益它可能不是正確的選擇(也許嘗試金字塔。)

爲您的內容類型爲Plone站點的完整部分它必須滿足Zope2,CMF和Plone層的許多要求。 plone.app.content.item.Item是關於您可以爲Plone網站的內容項目獲得的最簡單的基類,但是更簡單的基類本身並不會真正使您的內容類型的實例變得更「精益」 - 一種Python中的類實例基本上只是一個字典和一個指向它的類的指針。

大多數在頁面視圖中的工作將呈現一個網站的各種用戶界面功能。渲染基於架構的添加/編輯框架(如Archetypes和Dexterity)也相對昂貴。

我會花一點時間用支持的內容類型的系統之一,把時間分成構建自己之前剖析應用程序。

+0

我的內容類型有效!只是無法將其存儲在目錄中。如果我能做到這一點,我將航行! – sureshvv 2012-02-19 04:02:51

+0

感謝您的plone.app.content.item.Item提示。嘗試它。 – sureshvv 2012-02-19 04:24:39

+0

plone.app.content.item中的行李太多,尤其是dublincore的東西 – sureshvv 2012-02-21 05:43:37

0

您需要註冊與目錄多路複用器的類型。查看zmi - > archetypes_tool中的配置。

我不知道,但你可能還需要一個portal_type註冊也...

就像勞倫斯雖然說,你最好只使用當前內容類型的框架之一,如果你想成爲能夠使用plone的門戶目錄對數據進行編目。如果您可以處理單獨的目錄,請查看repoze.catalog。

+0

Plone Catalog工具是否要求我的類型在Archetype工具中使用目錄多路複用器進行註冊?將檢查,雖然我不能開始猜測爲什麼它會想要。 – sureshvv 2012-02-19 08:48:41

+0

挖入代碼,但沒有看到這是強制執行的......所以不要認爲這是一個問題 – sureshvv 2012-02-19 09:15:30

相關問題