def get_thumbnail(filename, arg=""):
kwargs = {\
'prefix': '',
'subdir': '_thumbs',
'size': (80,80),
'crop': False,
'enlarge': False,
'quality': 75,
}
for a in kwargs.keys():
if hasattr(settings, 'THUMBNAIL_%s' % a.upper()):
kwargs.update({a: getattr(settings, 'THUMBNAIL_%s' % a.upper())})
kwargs.update(filename=filename)
if arg.find('crop') != -1:
kwargs.update(crop=True)
if arg.find('enlarge') != -1:
kwargs.update(enlarge=True)
quality_pat = re.compile(r'q(\d+)')
m = quality_pat.search(arg)
if m:
quality = int(m.group(1))
if quality > 0 and quality <= 100:
kwargs.update(quality=quality)
size_pat = re.compile(r'(\d+)x(\d+)')
m = size_pat.search(arg)
if m:
kwargs.update(size=(int(m.group(1)), int(m.group(2))))
return Thumbnail(**kwargs)
16/07/2009
Retrieve (optional) constant values from settings file
10/07/2009
Simple horizontal list
HTML
<div id=”navcontainer”>
<ul>
<li><a href=”#” id=”current”>Item one</a></li>
<li><a href=”#”>Item two</a></li>
<li><a href=”#”>Item three</a></li>
</ul>
</div>
CSS
#navlist li
{
display: inline;
list-style-type: none;
padding-right: 20px;
}
21/05/2009
newSecurityManager
from AccessControl.SecurityManagement import newSecurityManager, noSecurityManager ... user = self.context.getWrappedOwner() newSecurityManager(self.request, user) self.doProtectedMethod() noSecurityManager()
createPortalObject()
def createPortalObject(self,folder,type_name,title): """ Helper per a portal object of specific type in the given folder """ objId = None try: id = self.context.plone_utils.normalizeString(title, relaxed=True) objId = folder.invokeFactory(id=id,type_name=type_name) except Exception, e: self.log(str(e)) id = folder.generateUniqueId(type_name) objId = folder.invokeFactory(id=id,type_name=type_name) self.log( 'createPortalObject(): objId = \"%s\"' % (objId) ) obj = getattr(folder,objId,None) obj.setTitle(title) obj.reindexObject() return obj
Portal Catalog samples
from Products.CMFCore.utils import getToolByName catalog = getToolByName(context, 'portal_catalog') # available indexes: print catalog.indexes() # available metadata columns: print catalog.schema() (1) basePath = '/'.join(self.getPhysicalPath()) query = filter query['sort_on'] = 'getObjPositionInParent' query['sort_order'] = 'reverse' query['path'] = {'query' : basePath, 'depth' : levels} query['portal_type'] = types brains = catalog.searchResults(query) (2) purchaseBrains = context.portal_catalog.searchResults(portal_type='Purchase',getId=id) (3) query = {} query['portal_type'] = 'Purchase' query['purchaseId'] = purchaseId purchaseBrains = context.portal_catalog.searchResults(query) (4) purchaseBrains = context.portal_catalog.searchResults( portal_type='Purchase', purchaseId = purchaseId ) (5) t = (DateTime.now() - 1).Date() folder = getattr(portal,'downloads') folderPath = urltool.getPortalPath() + '/' + urltool.getRelativeContentURL(folder) query = {} query['created'] = {'query': t, 'range': 'max'} query['path'] = {'query' : folderPath, 'depth' : 1} query['portal_type'] = ('Folder',) brains = catalog.searchResults(query)
Move items between two folders
from Products.CMFCore.utils import getToolByName catalog = getToolByName(context, 'portal_catalog') urltool = getToolByName(context, "portal_url") portal = urltool.getPortalObject() sourceFolder = getattr(portal,'italia') sourceFolderPath = urltool.getPortalPath() + '/' + urltool.getRelativeContentURL(sourceFolder) targetFolder = getattr(portal,'italia2') targetFolderPath = urltool.getPortalPath() + '/' + urltool.getRelativeContentURL(targetFolder) print str(sourceFolder) + ' ' + sourceFolderPath print str(targetFolder) + ' ' + targetFolderPath query = {} query['path'] = {'query' : sourceFolderPath, 'depth' : 2} query['portal_type'] = ('SalesArea',) brains = catalog.searchResults(query,sort_on='getId') # for reverse sorting: sort_order='reverse' for brain in brains: print brain.getId folder = brain.getObject().aq_parent print folder.getId cb = folder.manage_cutObjects(ids=[brain.getId]) targetFolder.manage_pasteObjects(cb) return printed
Retrieve and delete old items
import DateTime from Products.CMFCore.utils import getToolByName catalog = getToolByName(context, 'portal_catalog') urltool = getToolByName(context, "portal_url") portal = urltool.getPortalObject() t = (DateTime.now() - 2).Date() folder = getattr(portal,'downloads') folderPath = urltool.getPortalPath() + '/' + urltool.getRelativeContentURL(folder) print 'Deleting documents in "%s" created before %s ...' % (folderPath,t) query = {} query['path'] = {'query' : folderPath, 'depth' : 1} query['created'] = {'query': t, 'range': 'max'} query['portal_type'] = ('Folder',) brains = catalog.searchResults(query) ids=[] for brain in brains: ids.append(brain.id) print ids folder.manage_delObjects(ids=ids) return printed
Check Member Role in Context
# verifies if the member has expected roles in context def _checkMemberRole(self): authorized = False membership_tool = getToolByName(self.context, 'portal_membership') member = membership_tool.getAuthenticatedMember() if member is not None: roles = member.getRolesInContext(self.context) if 'Manager' in roles or 'UT' in roles: authorized = True return authorized
tal:on-error
<tal:dontcrash tal:on-error="structure python:context.plone_log('Error %s on %s while rendering portlet %s'%(error.type, error.value, slot[0])) or '<div class=\'error\'>Error %s on %s: %s</div>' % (error.type, slot[0], error.value)"> ... </tal:dontcrash>