Archive for the ‘Zope/Plone’ Category
Ploneのコンテンツを公開したときTwitterにツイートする.
Plone4アドベントカレンダー2011の21日目です.
ワークフローの状態が変わったらTwitterにツイートするサンプルを作成しました.
ngi.site.notificationです.
このサンプルでEventHandlerとRegistryの使い方,コントロールパネルの作成方法がわかります.
確実にエラーが出ると思います.出たら教えてください.
インストール方法
- buildout.cfgに以下を追加
extends = http://good-py.appspot.com/release/dexterity/1.1?plone=4.1.3 eggs = ngi.site.notification - ./bin/buildout を実行します.
- サイト設定のアドオンからNotificationをインストールします.
使い方
インストールが終わったら,サイト設定のNotification settingsを表示します.
Action:ワークフローのアクションのidを記入します.デフォルトでpublishが入っています.
comment:ツイートする際のコメントを記入します.
Consumer key,Consumer secret,Access token,Access token secretはhttps://dev.twitter.com/でapplication登録した際のOAuth設定情報を入力します.
設定は以上です.
試してみる
オープンソースOCWのeduCommons
みなさん、こんにちは。 本日は、私がPlone4 アドベントカレンダー2011の担当します。
オープンコースウェア
オープンコースウェア(OCW)を皆さんご存知でしょうか? これは、大学の講義をインターネットを使って無償で提供するという活動です。 代表例は、MITのOCWサイトでしょう。私もたまに利用しています。
eduCommons
eduCommonsは、教育機関がOCWを簡単に導入するためのアプリケーションです。OCWの担当者は、一番重要な、コンテンツに集中することができます。このeduCommonsは、Ploneをベースに作られています。今年、Plone4をベースとしたeduCommons4がリリースされました。ベースのPlone4のパフォーマンスが上がっているので、eduCommons4の性能も上がっていることが期待できます。
まず、どんなものかを見てみたい人は、educomonns.comにデモサイト(http://demo.educommons.com/)があるので使ってみるといいでしょう。
日本にもeduCommonsを使って活動している大学を紹介します。どれも、貴重な講義が掲載されていて一見の価値があります。
おわりに
Plone4を使って作られた教育向けアプリケーションの紹介をしました。もう一回、担当があるので、次回は、Plone4を使った開発のことについて書きたいと思います。
リンク
- 日本オープンコースウェア・コンソーシアム http://www.jocw.jp/
SSO利用時のlogoutスクリプト
SSOのlogoutスクリプト
from Products.CMFCore.utils import getToolByName
try:
from Products.CMFPlone import transaction_note
except ImportError:
from Products.CMFPlone.utils import transaction_note
from Products.PluggableAuthService.PluggableAuthService import logger
logger.info("REQUEST.cookies = %r" % repr(context.REQUEST.cookies))
try:
context.acl_users.logout(context.REQUEST)
except:
pass
target_url = context.REQUEST.URL1.replace('$', '$$')
skinvar = context.portal_skins.getRequestVarname()
path = '/' + context.absolute_url(1)
if context.REQUEST.has_key(skinvar) and not context.portal_skins.getCookiePersistence():
#logger.info("expiring skin cookie")
context.REQUEST.RESPONSE.expireCookie(skinvar, path=path)
sdm = getToolByName(context, 'session_data_manager', None)
if sdm is not None:
#logger.info("got session_data_manager")
session = sdm.getSessionData(create=0)
if session is not None:
#logger.info("invalidating session")
session.invalidate()
if context.REQUEST.cookies.has_key('__ac'):
#logger.info("building local account logout URL")
transaction_note('Logged out')
target_url += '/logged_out'
context.REQUEST.RESPONSE.redirect(target_url)
else:
#logger.info("building shibboleth lazy logout URL")
config = context.acl_users.ShibbolethLogin.getConfig()
spliturl = target_url.split(':')
if config['http_logout_to_http']:
spliturl[0] = 'http'
try:
if config['http_login_url'][0][1][-1] == '=':
splitpath = spliturl[2].split('/')
port = str(config['http_login_to_port'])
if (spliturl[0] == 'https' and port == '443') or \
(spliturl[0] == 'http' and port == '80'):
# don't include default ports
del spliturl[0]
else:
splitpath[0] = port
if splitpath:
spliturl[2] = '/'.join(splitpath)
else:
del spliturl[2]
target_url = config['http_logout_url'] + ':'.join(spliturl) + '/logged_out'
else:
raise IndexError
except IndexError:
target_url = ':'.join(spliturl)
target_url = '%s/Shibboleth.sso/Logout?return=%s' % (target_url, target_url)
context.REQUEST.RESPONSE.redirect(target_url)
print 'This is the %s "%s" in %s' % (script.meta_type, script.getId(), context.absolute_url())
return printed
Blobのファイルはどこに保存されている?
明けましておめでとうございます。と言っても1月ももう後半ですが。
Ploneを使っていて、ふと、Blobフィールドのファイルがどこに保存されているか知りたくなりました。
f = obj.getField('file')
blob = f.getUnwrapped(obj)
zodb_blob = blob.getBlob()
blob_file = zodb_blob.open()
blob_file.name
で、このnameがファイルシステムに保存されているファイルのフルパスになります。
なお、zodb_blob._p_oid を整形したものが Pathになっているぽい。
今年もよろしくお願いいたします。
collective.xdv でコンテンツタイプごとのテーマテンプレート切り替え
collective.xdv
今まで、テーマテンプレートとルールを切り替えるのは、「コントロールパネルでできる、URLの正規表現マッチだけ。」と思っていた。
でも、こいつは、diazo(xdv)サーバーを使っている。だから、diazo(xdv)の書き方にそって、ルール内に<theme />タグで書いてあげれば、コンテンツタイプごとに切り替えだってできるのだ。
たとえば、ドキュメントコンテンツタイプでテンプレートを切り替えるには、 <theme href=”sample.html” css:if-content=”body.portaltype-document”/> てな感じで簡単に切り替えができる。
これができたので、ルールのネストなんかもできるに違いない!後日テストしよう。
ロゴとフッターを変えるプロダクト
Plone4のデザインは、素敵だけど、ロゴとフッターの変更が面倒だと常々感じる。TTTWで変更できるけど、ZMIにアクセスして、base_propertiesをいじったり、Page templateファイルをいじったりしないといけない。
Ploneには、サイト設定という場所がある。なぜ、ロゴとフッターを変更するというサイト作成において、重要なものがないのだろうか?と思っていた。
そこで、今回、さくっと作ってみた。Plone4でしかテストしていないけど、とりあえず、動いている感じ。
ngi.theme.simple
http://pypi.python.org/pypi/ngi.theme.simple/1.0b3
override.zcmlを使ったりとちょっと?というところもあるけど、それは、これから直していきます。
Plone で動くBlogプロダクト
Plone で動くBlogプロダクトで便利だなーと思うのは、collective.blogging。
これは、標準アイテムを拡張してBlogにしてしまうもの。PloneのUIにはマッチしたものだけど、単純に記事を書いて、公開したいというには、ちょっと面倒。
そこで、勉強がてらBlogを作ってみた。(まだ公開していないけど。)
以前、dexterityの勉強のために、
Products.ngiNikkiというのを作っていて(まだ作成中・・・。)、これをArchetypeベースにして、lightboxを同梱し、Plone3とPlone4両方で動くようにしたもの。
残すタスクは、ポートレット部分と国際対応、そして、すこしのテンプレート修正。あと、ドキュメントか。
プロダクト名は、ngi.site.blog となる予定。
今月末の公開を目指す。
なお、使ってもらっているサイトは、こちら↓↓
http://www.edu-con.jp/s-blog
Plone 4 dev用buildout
以下、最近利用する頻度が多くなってきたのでメモしておく。
Plone4 のbuildoutの場所
http://svn.plone.org/svn/plone/buildouts/plone-coredev/branches/4.0/
MeeGo に Plone4 をインストールするために必要な物
MeeGoというIntelとNokiaによるLinuxOSを使い始めた.このOSのUIはかわいくて使っていて楽しくなる.これを開発用にしようと思い,Plone4 Unifiedinstallerをインストールしてみた.インストールする為に必要なパッケージの一覧は下記である.
- make
- gcc-c++
- zlib-devel
- libjpeg-devel
- readline-devel
これらをyumを使ってインストールする.これでPlone4をインストールして利用することが出来る.
Plone4のpoファイルのコンパイルオプション
Plone 4のUnified Installerには、下記の記述がbuildoutファイルにないので、poファイルがコンパイルされない。そのため、自分で作ったプロダクト等の翻訳が適用されないで焦るときがある。そんなときは、下記の記述の確認をし、無ければ、buildout.cfgなどに追加してあげるとよい。
[instance]
environment-vars =
zope_i18n_compile_mo_files = true
以上、忘れずにメモしておく。
Ploneのサイト管理でスキンカスタマイズ「Theme Editor」
Plone 4 の experimental に skineditor.cfg が追加されました。
1.Ploneのサイト管理でスキンのカスタマイズを可能にする 「plone.app.skineditor」
plone.app.skineditor は、ZMIにアクセスせず、Ploneのサイト管理からportal_skin, portal_view_customizationsの中のテンプレートやリソースをカスタマイズできるという優れものです。
旧来の、ZMIによるカスタマイズでは、portal_skin, portal_view_customizationsそれぞれの場所に行き、該当するファイルを探し出してカスタマイズする必要があり、手間が多く、ZMIは、Ploneの管理インターフェイスとは少し異なるので、抵抗がある人もいたと思います。
2.インストール
早速、 ./bin/buildout -c skineditor.cfg -n を実行します。
サイト設定に行き、Theme Editor 0.1devをインストール(有効に)します。
図1:有効にした状態 Theme Editorと表示される。
3.Theme Editorを使ってみる。
Theme Editorをクリックして、どのようなものか見てみます。
図2:Theme Editor画面
Skin Resource Editorというタイトルが表示され、スキンのリソースが一覧で表示されます。タイトルの下にある、検索ボックスで、テンプレートやリソース、Pythonスクリプト、JavaScriptを検索でき、隣のキーワードタグでフィルタリングすることができます。
4.試しにFooterを変更してみる。
では、試しにFooterを変更してみたいと思います。キーワードタグの中から、Viewletsをクリックします。Footerは、plone.footerという名前なのでそれを選択します。
図3:plone.footerを選択したところ
クリックすると、該当するテンプレートやインターフェイスを記したボックスが表示されます。まさにこのテンプレートを編集したいので、クリックします。
図4:テンプレートの内容が表示された。
ポップアップして、テンプレートの中身が表示されました。
CustomizeボタンをクリックしてCustomします。
図5:ビューのカスタマイズをしているところ
編集が終わったら、最後に、Save Changesをクリックして保存します。現段階では、ウィンドウが自動でクローズしないみたいなので、自分で「×」ボタンを押してクローズします。
図3の画面に戻ってみると、カスタムしたものが先ほどの項目の上に表示されています。そして、有効になっているので、赤色の*で記されています。
図6:カスタムができ、項目が増えた。Customしたものは「In the database」となっている。
以上でカスタマイズが終了しました。
図7:Before
図8:After
5.おわりに
PloneのSkinカスタマイズは、ZMIにアクセスしないといけないのが、欠点でした。これと同時にインストールされる、Products.Glowormを使えば、ZMIに行かずにPloneの統一されたUIで作業ができるので、とても重宝しそうです。
Ploneのフォームで2重投稿を禁止するJSの回避方法
Ploneは、フォームで2重投稿を極力避けるために、jQueryを使ってアラートを出すようにしています。
これは、目的によっては、邪魔な存在なので、表示させない方法。
submitボタンのクラスに allowMultiSubmit を割り当てる。
以上で回避できます。
Windows版のPlone
Windows版のPlone 4は、portal_css, portal_javascriptsをデバッグモードにしておくと、非常に遅い!!!
スキンプロダクトの作成や、ビュー周りの検証をするときは、Linuxか、MacにインストールしたPlone 4を使うとよい。
フォルダが作成出来ないと嘆いていたら。
Flashからフォルダを作成出来るようにしていたのですが、どうもうまく動かない。
プロセスもpermissionにも間違い無いはずなのに、なぜ動かないのだろう。
いろいろと調べていたら・・・
テスト環境にフォルダを作成する為のメソッド名と同名のPythonスクリプトが存在した・・・。
・・・・・・・・・・・・。
さあ、次に進むぞ。
反省
Flash部分にどのぐらいのコストをかけ、Ploneの部分にどのぐらいのコストをかけるかというのをはっきりとしておくべきだった。
反省・・・。











