Plone2.1.1のフォルダで写真¶
aihatenaの猫を世話することに‥‥ってこれも9月の写真。ヨドバシ秋葉オープンの翌日だったかな。
ZPhotoSlidesを改良して使うよりもPlone2.1系のフォルダを使った方が問題が少なそうだったので乗り換えてみました。ZPhotoSlidesから乗り換えて良くなった点と悪くなった点があるけど、標準フォルダ機能だと考えると良くできていると思う。少なくとも、自分の使い方の範囲では乗り換えに耐えられる。
良くなった点¶
WebDAVやFTPで一気にアップロード出来る
メモリリークが起きない
Plone2.1の作法で作られているのでカスタマイズがしやすい
悪くなった点¶
ZODBの外に保存できない
概要や名前の修正を一つ一つやるのがめんどくさい(フォルダViewからは出来ない)
多くの機能が減った(スライドショーとか)が、もともと使わないので...
変わらない点¶
写真の並び替えが大変
ATFolderで写真、の先人の方々¶
ZPhotoSlidesからATFolderへ変換¶
以下はPlone2.1.1上でZPhotoSlidesからATFolder/ATImageに変換した時に使ったスクリプト。 一応必要そうなデータは変換できるはず。でもプロパティーとかに値が設定してある場合はそれも変換するコードを追加しないといけない。使い方は省略する方向で。
## Script (Python) "folder_converter"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=src, dest
##title=
request = container.REQUEST
def convert_image(src_obj, dest_container):
id = callable(src_obj.id) and src_obj.id() or src_obj.id
dest_container.invokeFactory(type_name='Image', id=id)
obj = dest_container[id]
kwargs = {
'title': src_obj.title,
'content_type': src_obj.content_type,
'precondition':'',
'filedata':src_obj.data,
}
obj.manage_edit(**kwargs)
obj.setDescription(src_obj.description)
print id, 'converted.'
return printed
def convert_atfolder(src_obj, dest_container):
id = callable(src_obj.id) and src_obj.id() or src_obj.id
dest_container.manage_addFolder(id, src_obj.title)
obj = dest_container[id]
print "'%s'" % src_obj.Description(),
obj.setDescription( src_obj.Description() )
obj.indexObject()
print 'converted.'
print convert_folder(src_obj, obj)
return printed
def convert_folder(src_container, dest_container):
for obj in src_container.objectValues():
id = callable(obj.id) and obj.id() or obj.id
print 'converting.. ', id, "(%s)" % obj.meta_type,
if obj.meta_type in ('ATFolder',):
print convert_atfolder(obj, dest_container)
elif obj.meta_type in ('CMF ZPhoto','ZPhoto',):
print convert_image(obj, dest_container),
elif obj.meta_type in ('CMF ZPhotoSlides',
'CMF ZPhotoSlides Folder',
'ZPhotoSlides',
'ZPhotoSlides Folder',):
dest_container.manage_addFolder(id, obj.title)
sub_dest = dest_container[id]
sub_dest.setDescription( obj.description )
sub_dest.indexObject()
print 'converted.'
print convert_folder(obj, sub_dest)
else: # copy for unknown
o = src_container.manage_copyObjects(id)
dest_container.manage_pasteObjects(o)
dest_container[id].indexObject()
print '%s copied.' % id
return printed
print 'make "%s"' % dest
src_container = container[src]
container.manage_addFolder(dest)
dest_container = container[dest]
dest_container.setDescription( src_container.Description() )
print convert_folder(src_container, dest_container),
print 'done'
return printed