Pythonスクリプトを使って便利な機能を実装
2009年12月4日
田原悠西さんからZope/Ploneのアドベントカレンダーのバトンがやってきました。
ネタをいろいろと考えてみましたが、普段便利に良く使ってるが、書くことが少ないだろうと思う、ZMIから簡単に実行できるScript(Python)ネタをいくつか書こうと思います。
Script(Python)は、制限が厳しく、指定されたものしかインポートできないなどありますが、ある程度の操作ならここでできます。
下記のスクリプトを記述し、上部の「test」ボタンをクリックすると実行されます。引数を設定した場合は、引数入力画面が表示されます。
なお、結果がない場合は、画面が遷移しません。
いずれのScript(Python)もZMIからportal_skins/custom/ 以下に設置しています。
コンテンツの数を数える(すべての)
catalog = context.portal_catalog
items = catalog()
print len(items)
return printed
コンテンツの数を数える(画像のみ)
catalog = context.portal_catalog
items = catalog(portal_type='Image')
print len(items)
return printed
ページの本文内に、ある文言(引数で指定)が入っている物URLを列挙
Parameter List : s
catalog = context.portal_catalog
items = catalog(portal_type='Document')
for item in items:
obj = item.getObject()
text = obj.getText()
if s in text:
print item.getURL()
# print obj.absolute_url() でもOK
return printed
ワークフロー遷移(非公開のコンテンツを公開する)
catalog = context.portal_catalog
wftool = context.portal_workflow
items = catalog()
for item in items:
obj = item.getObject()
review_state = wftool.getInfoFor(obj, 'review_state', '')
if review_state == 'private':
wftool.doActionFor(obj, 'publish')
print 'ID: ', item.getId, ' is Published'
return printed
オブジェクトのリインデックス(newsパスの以下)
catalog = context.portal_catalog
items = catalog(path='/Plone/news')
for item in items:
obj = item.getObject()
obj.reindexObject()
print item.getId
return printed
登録ユーザの列挙
mtool = context.portal_membership
members = mtool.listMembers()
print 'Toltal : ', len(members)
for member in members:
print member.id, member.getProperty('fullname'), member.getProperty('email')
return printed
インストール可能な物と既にされているアドオンプロダクトの列挙
qi = context.portal_quickinstaller
for p in qi.listInstallableProducts():
print 'install able: ', p['id']
for p in qi.listInstalledProducts():
print 'installed: ',p['id']
return printed
次のバトンは、安田さんにお願いしようと思います。