Changeset 823
- Timestamp:
- 03/09/07 11:22:50
- Files:
-
- SimpleBlog/branches/optimizations/SimpleBlogTool.py (modified) (4 diffs)
- SimpleBlog/branches/optimizations/content/blog.py (modified) (5 diffs)
- SimpleBlog/branches/optimizations/content/blogfolder.py (modified) (1 diff)
- SimpleBlog/branches/optimizations/skins/SimpleBlog/SimpleBlog_macros.pt (modified) (3 diffs)
- SimpleBlog/branches/optimizations/skins/SimpleBlog/simpleblog_portlet_macros.pt (modified) (2 diffs)
- SimpleBlog/branches/optimizations/skins/SimpleBlog/simpleblog_view.pt (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
SimpleBlog/branches/optimizations/SimpleBlogTool.py
r822 r823 162 162 # if we are higher in the tree than any Blog then we will end up in the portalobject itself 163 163 # in that case we just search for categories starting in context. 164 164 165 165 166 if not startpoint: 166 167 startpoint = self.getStartpoint(context, fromHere=0) 168 categories = context.portal_catalog.uniqueValuesFor('EntryCategory') 169 path = self.getObjectPath(startpoint) 167 170 168 171 # now we have the starting point for our search 169 172 170 result = startpoint.portal_catalog.searchResults(meta_type=['BlogFolder', 'Blog'], path={'query':self.getObjectPath(startpoint),'level':0})173 #result = startpoint.portal_catalog.searchResults(meta_type=['BlogFolder', 'Blog'], path={'query':self.getObjectPath(startpoint),'level':0}) 171 174 172 175 # now fetch all the available categories 173 categories=[]174 for o in result:175 obj=o.getObject()176 cats = obj.getCategories()177 for c in cats:178 if not c in categories:179 categories.append(c)180 176 #categories=[] 177 #for o in result: 178 # obj=o.getObject() 179 # cats = obj.getCategories() 180 # for c in cats: 181 # if not c in categories: 182 # categories.append(c) 183 # 181 184 # add the global categories 182 for c in self.getGlobalCategories():183 if not c in categories:184 categories.append(c)185 #for c in self.getGlobalCategories(): 186 # if not c in categories: 187 # categories.append(c) 185 188 186 189 # now we have a list of unique categories available from startpoint and deeper in tree … … 189 192 for c in categories: 190 193 result = startpoint.portal_catalog.searchResults(review_state=self._getState(), meta_type='BlogEntry', EntryCategory=c, path={'query':self.getObjectPath(startpoint),'level':0}) 191 rescats[c]=len(result) 194 num = len(result) 195 if num >0: 196 rescats[c]=len(result) 192 197 return rescats 198 #return categories 193 199 194 200 security.declarePublic('getSortedKeys') … … 251 257 query['EntryCategory']=category 252 258 253 query['getAlwaysOnTop']=1259 #query['getAlwaysOnTop']=1 254 260 255 261 if filterState: … … 257 263 258 264 259 resultsTop = startpoint.portal_catalog.searchResults(query, meta_type='BlogEntry', path={'query':self.getObjectPath(startpoint),'level':0}, sort_order='reverse', sort_on='effective')260 261 query['getAlwaysOnTop']=0262 results NoTop = startpoint.portal_catalog.searchResults(query, meta_type='BlogEntry', path={'query':self.getObjectPath(startpoint),'level':0}, sort_order='reverse', sort_on='effective')263 264 results = resultsTop + resultsNoTop265 266 if maxResults==0:265 #resultsTop = startpoint.portal_catalog.searchResults(query, meta_type='BlogEntry', path={'query':self.getObjectPath(startpoint),'level':0}, sort_order='reverse', sort_on='effective') 266 267 #query['getAlwaysOnTop']=0 268 results = startpoint.portal_catalog.searchResults(query, meta_type='BlogEntry', 269 path={'query':self.getObjectPath(startpoint),'level':0}, sort_order='reverse', 270 sort_on='effective', sort_limit=maxResults) 271 272 if maxResults==0: 267 273 return results 268 274 elif maxResults==None: SimpleBlog/branches/optimizations/content/blog.py
r822 r823 16 16 from Products.Archetypes.utils import unique 17 17 18 from Products.ATContentTypes.content.base import ATCTFolder18 from Products.ATContentTypes.content.base import ATCTBTreeFolder, ATCTFolder 19 19 20 20 schema = ATCTFolder.schema.copy() + Schema(( … … 247 247 def synContentValues(self): 248 248 # get brains for items that are published within the context of this blog. 249 entries = self.simpleblog_tool.searchForEntries(self, maxResults=0) 250 249 syn_tool = getToolByName(self, 'portal_syndication') 250 limit = int(syn_tool.getMaxItems(self)) 251 entries = self.getrEntries(self, maxResults=limit) 252 251 253 # convert to objects 252 254 objs = [e.getObject() for e in entries] … … 268 270 return [f for f in self.getBRefs('AppearsIn') if self.portal_membership.checkPermission('View', f)] 269 271 270 def getEntries(self, category=None, maxResults=None, b_start=0, filterState=1, join=0, skipOnTop=0, **kwargs):272 def getEntries(self, category=None, maxResults=None, b_start=0, filterState=1, join=0, skipOnTop=0, mode="", **kwargs): 271 273 """ Return all the contained published entries, real objects, not the brains """ 272 274 # see simpleblog_tool.searchForEntries for API description … … 278 280 query['review_state']=publishedState 279 281 if maxResults: 280 query['sort_limit'] = maxResults 282 query['sort_limit'] = maxResults + 1 # need to if the last page riched 281 283 query['path'] = {'query':self.simpleblog_tool.getObjectPath(self),'level':0} 282 284 query['sort_order'] = 'reverse' … … 286 288 if not skipOnTop and b_start==0: 287 289 query['getAlwaysOnTop']=1 288 # first the items that need to be listed on top289 290 onTop = list(self.portal_catalog.searchResults(query)) 290 #onTop = [r.getObject() for r in localOnTop ]291 # then the other items292 291 query['getAlwaysOnTop']=0 293 292 294 293 onBottom = list(self.portal_catalog.searchResults(query)) 295 #onBottom= [r.getObject() for r in localNoTop]296 297 294 #### cut the b_start when it is tooo large 298 295 296 itemsPerPage = self.getDisplayItems() 299 297 last = 0 298 if len(onBottom) < maxResults + 1: #last page 299 last = 1 300 elif len(onBottom) == maxResults + 1: #not last page yet 301 onBottom = onBottom[:-1] 302 if len(onBottom) < b_start: # too large b_start given 303 b_start = (len(onBottom)/itemsPerPage)*itemsPerPage 300 304 if join: 301 305 results = onTop+onBottom 302 306 if b_start > 0: 303 if len(onBottom) ==b_start:307 if len(onBottom) == b_start: 304 308 b_start = b_start-(maxResults-b_start) 305 309 last = 1 306 310 results = results[b_start:] 307 if maxResults==0: 308 return (results,last) 309 elif maxResults==None: 310 results =[r.getObject() for r in results[:self.simpleblog_tool.getMaxItemsInPortlet()]] 311 return results 311 #if maxResults==0: 312 # return (results,last) 313 #elif maxResults==None: 314 # #results =[r.getObject() for r in results[:self.simpleblog_tool.getMaxItemsInPortlet()]] 315 # return (results,0) 316 #else: 317 # results = [r.getObject() for r in results] 318 # return (results,last) 319 if mode == "full": 320 results = (results,last) 312 321 else: 313 results = [r.getObject() for r in results]314 return (results,last)322 results = (results,last) 323 return results 315 324 else: 316 return ( [r.getObject() for r in onTop], [r.getObject() for r in onBottom])325 return (onTop, onBottom) 317 326 318 327 def getAdminEmail(self): SimpleBlog/branches/optimizations/content/blogfolder.py
r822 r823 5 5 from Products.CMFCore import CMFCorePermissions 6 6 7 from Products.ATContentTypes.content.base import ATCTFolder7 from Products.ATContentTypes.content.base import ATCTBTreeFolder, ATCTFolder 8 8 9 9 import Products.SimpleBlog.Permissions SimpleBlog/branches/optimizations/skins/SimpleBlog/SimpleBlog_macros.pt
r822 r823 28 28 <span tal:define="item_type obj/portal_type; 29 29 item_type_class python:'contenttype-' + normalizeString(item_type);" 30 tal:attributes="class string:simpleBlogIcons ${item_type_class}" tal:content="obj/ title"/></a>30 tal:attributes="class string:simpleBlogIcons ${item_type_class}" tal:content="obj/Title"/></a> 31 31 </h2> 32 32 <h2 class="noMargin" tal:condition="not:showIcons"> … … 35 35 </h2> 36 36 <p class="simpleBlogDescription" 37 tal:content="structure python:obj.Description()"37 tal:content="structure obj/Description" 38 38 tal:condition="obj/Description">Description</p> 39 <div tal:replace="structure python:obj.getBody()" class="simpleBlogBody"/>39 <div tal:replace="structure obj/getBody" class="simpleBlogBody"/> 40 40 <tal:tags metal:use-macro="obj/simpleblog_byline/macros/technoratiTags"/> 41 41 <tal:byline tal:condition="showByline"> … … 57 57 </h2> 58 58 <p class="simpleBlogDescription" 59 tal:content="structure python:obj.Description()"59 tal:content="structure obj/Description" 60 60 tal:condition="obj/Description">Description</p> 61 61 <tal:tags metal:use-macro="obj/simpleblog_byline/macros/technoratiTags"/> SimpleBlog/branches/optimizations/skins/SimpleBlog/simpleblog_portlet_macros.pt
r822 r823 26 26 <div metal:define-macro="portletRecent"><tal:block 27 27 tal:define="maxResults here/simpleblog_tool/getMaxItemsInPortlet; 28 recent python:startpoint.getEntries(maxResults=maxResults,skipOnTop=1, join=1) ;28 recent python:startpoint.getEntries(maxResults=maxResults,skipOnTop=1, join=1)[0]; 29 29 global showIcons startpoint/getShowIcons;"><tal:toggle 30 30 tal:define="global toggle python:1"/> … … 38 38 <dd class="" 39 39 tal:define="oddrow repeat/entry/odd; 40 item_type entry/portal_type; 40 obj entry; 41 item_type obj/portal_type; 41 42 item_type_class python:'contenttype-' + normalizeString(item_type);" 42 43 tal:attributes="class python:test(toggle, 'portletItem even','portletItem odd')"> 43 44 <a href="#" 44 tal:attributes="href entry/absolute_url;"45 tal:attributes="href obj/getURL;" 45 46 title="entry"> 46 <span tal:attributes="class python:showIcons and 'simpleBlogPortletIcons '+item_type_class or ''" tal:content=" entry/Title"/>47 <span tal:attributes="class python:showIcons and 'simpleBlogPortletIcons '+item_type_class or ''" tal:content="obj/Title"/> 47 48 </a><tal:toggle tal:define="global toggle python:test(toggle==1,0,1)"/> 48 49 </dd> SimpleBlog/branches/optimizations/skins/SimpleBlog/simpleblog_view.pt
r822 r823 9 9 displayMode displayMode | python:here.getDisplayMode(); 10 10 b_size python:displayItems; 11 b_start python:0; 12 b_start request/b_start | b_start; 13 results python:here.getEntries(maxResults=int(b_start)+displayItems, sort=1, join=1, b_start=int(b_start)); 14 last python:results[1]; 15 b_start python:last and int(b_start)-displayItems or b_start; 16 last python:len(results[0])<displayItems and 1 or last;"> 11 b_start python:int(request.get('b_start', 0)) or 0; 12 b_start python:(b_start%displayItems)!=0 and (b_start/displayItems)*displayItems or b_start; 13 results python:here.getEntries(maxResults=b_start+displayItems, sort=1, join=1, b_start=b_start,mode=displayMode); 14 last python:results[1]"> 17 15 <tal:block metal:use-macro="here/SimpleBlog_macros/macros/blogGlobals"/> 18 16 <div metal:use-macro="here/document_actions/macros/document_actions"> … … 39 37 <div tal:condition="results" tal:define="batch python:results[0];"> 40 38 <tal:block tal:repeat="entry batch"><tal:entry 41 tal:define="obj python:entry;"><div metal:use-macro="here/SimpleBlog_macros/macros/?displayMode"/>39 tal:define="obj entry/getObject"><div metal:use-macro="here/SimpleBlog_macros/macros/?displayMode"/> 42 40 <br/> 43 41 </tal:entry></tal:block>
