从Viewlet中的文件夹重复plone页面的内容

时间:2014-04-16 12:42:10

标签: python plone zpt

我创建了一个viewlet,它应该显示文件夹中plone页面的可编辑部分。结果是此文件夹中每个页面的整个结构。我的页面模板代码可能出错了。任何想法都将不胜感激。

viewlet代码和目录搜索:

class MyViewlet(grok.Viewlet):
    grok.name('my-viewlet')
    grok.order(0)
    grok.context(Interface)
    grok.viewletmanager(IBelowContent)
    index=ViewPageTemplateFile('templates/templatefile.pt')


    def update(self):
        self.context = aq_inner(self.context)
        self.project = self.getProject()
        self.project_array = self.getProjectArray()

    @memoize
    def getProject(self):
        portal_catalog = getToolByName(self.context, 'portal_catalog')
        site = self.context.portal_url.getPortalObject()
        folder_path = "/" . join(site.getPhysicalPath())
        folder_path += "/afolder"
        results = portal_catalog.searchResults({
                                                'portal_type':'Document',
                                                'path':{'query': folder_path,'depth': 1},
                                                'sort_on':'getObjPositionInParent'
                                                })
        project_array = processResults(results)
        if(project_array):
            return project_array[0]
        else:
            return False

    @memoize
    def getProjectArray(self):
        portal_catalog = getToolByName(self.context, 'portal_catalog')
        portal_state = getMultiAdapter((self.context, self.request), name=u'plone_portal_state')
        site = portal_state.portal()
        folder_path = "/" . join(site.getPhysicalPath())
        folder_path += "/afolder"
        results = portal_catalog.searchResults({
                                                'portal_type':'Document',
                                                'path':{'query': folder_path,'depth': 1},
                                                'sort_on':'getObjPositionInParent'
                                                })
        project_array = processResults(results)
        if not project_array:
            return False
        for i in project_array:
            i['class']='';
        project_array[0]['class']='active'
        return project_array


    def render(self):
        return self.index() 

templatefile.pt:

<tal:block
   tal:define="our_url context/@@plone_context_state/canonical_object_url;
               home_url context/@@plone_portal_state/portal_url;"
   tal:condition="python:our_url == home_url">
    <div id="previous-projects-viewlet" class="respond">
        <div id="projects">
            <div id="projects-container">
                <tal:block tal:repeat="project view/project_array">
                    <tal:block tal:define="iobject project/brain/getObject">
                        <div tal:attributes="id string:project-${repeat/project/index}; 
                                             class string:${project/class} project;"
                             tal:content="structure iobject"/>
                    </tal:block>    
                </tal:block>            
            </div>
        </div>  
    </div>
</tal:block>

2 个答案:

答案 0 :(得分:0)

替换folder_path = "/".join(site.getPhysicalPath())

"/".join(self.context.getPhysicalPath())

您正在使用站点路径,而不是目录查询的文件夹(当前上下文)路径。

答案 1 :(得分:0)

谢谢Mathias。问题出在模板文件中,它是定义的变量/ getText来呈现页面内容。

<tal:content="structure iobject/getText"/>