我创建了一个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>
答案 0 :(得分:0)
替换folder_path = "/".join(site.getPhysicalPath())
与
"/".join(self.context.getPhysicalPath())
您正在使用站点路径,而不是目录查询的文件夹(当前上下文)路径。
答案 1 :(得分:0)
谢谢Mathias。问题出在模板文件中,它是定义的变量/ getText来呈现页面内容。
<tal:content="structure iobject/getText"/>