nantes-developpement.com
Remember from July 7 2010 the release of the website nantes-developpement.com . This project has been updated and it uses lots of add-ons. I just want to share add-ons used to create it:
- Products.Maps
- Products.PloneFormGen
- Products.TinyMCE
- Products.TextIndexNG3
- Products.CompoundField
- Products.ZNagios
- five.grok
Removed from the Plone3 version:
- collective.z3cform.norobots
- collective.groupdashboard
- collective.portlet.actions
- collective.plonebookmarklets
- collective.contentlicensing
- collective.autopermission
- collective.contentrules.mail
- collective.harlequin
- collective.monkeypatcher
- collective.z3cform.grok
- experimental.contentcreation
- experimental.aggressiveopaquespeedup
- collective.remove.kss
- collective.remove.kupu
- collective.remove.rules
- Products.CacheSetup
- plone.app.ldap
- iw.fss
Migrate from Plone3 to Plone4
removing iw.fss
The remove of iw.fss was not that simple. after reading some thread I have found a python snippet and adapted to this usecase.
def upgrade_fss2attr_storage(portal_setup):
"""We use fss on plone3, so we need first to come back to default
plone so the migration of plone will next do the job to go on blob"""
site = portal_setup.aq_parent
#fss2attributestorage
from cStringIO import StringIO
from Products.Archetypes.Storage import AttributeStorage
from iw.fss.FileSystemStorage import FileSystemStorage
# attr_storage = AttributeStorage()
fss_storage = FileSystemStorage()
catalog = getToolByName(site, 'portal_catalog')
brains = catalog(portal_type="File")
files = [b.getObject() for b in brains]
brains = catalog(portal_type="Image")
images = [b.getObject() for b in brains]
def migrateFile(f):
field = f.Schema()['file']
content = StringIO(str(fss_storage.get('file', f)))
fss_storage.unset('file', f)
field.set(f, content)
def migrateImage(img):
field = img.Schema()['image']
try:
content = StringIO(str(fss_storage.get('image', img)))
except AttributeError:
logger.error('img %s has no image attribute'%img)
return
fss_storage.unset('image', img)
field.set(img, content)
for f in files:
migrateFile(f)
for img in images:
migrateImage(img)
Theming
This migration has been triggered by the need of a new theme. The theme use 960 grid system with the brand new theming engine of Plone: plone.app.theming. This is my second Plone theme done with plone.app.theming. My opinion is it is not a full theming engine but a great tools to create simple theme but you will always need to add viewlets, to rewrite a template and doing 'old' theming stuff. I mean understanding skin directory, browser view, etc...
Integration
I have tested a lots of add-ons, create some, review others, improving, doing bug reports, but also added some integration.
I have added integration between collective.addthis and collective.googleanalytics so any sharings are pushed as social event in GA.
I have discovered plone.app.search that is the next generation search form that will be provided with Plone4.2. Integration of this one was quite simple to do just by adding Modernizr to the javascript registry plus customize the rendering and customize livesearch to use this one view. Far more simple than previous search form.
Varnish is used as proxy cache and integrated using plone.app.caching. I have reported a bug concerning the toggle visibility of portlets which doesn't play well with varnish.
SugarCRM is now used at many levels: login, contact portlet, lead form (PloneFormGen->SugarCRM) and contact/account viewlet throw the use of collective.sugarcrm.
TinyMCE 1.3 is used providing a customization: the configuration is not the same for administrator and for contributor. This version is working great but need to be tested more & more, so please, clone the master in your project and contribute to it.
Galleries are displayed using collective.gallery with a custom view based on jquery ad-gallery plugin, using picasaweb as albums provider. This one is now available as a 1.0 on pypi.
If you have any questions you can contact me: toutpt at gmail dot com.