ngi644の日記

備忘録も兼ねています。

Archive for the ‘Zope/Plone’ Category

Ploneのコンテンツを公開したときTwitterにツイートする.

without comments

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設定情報を入力します.

設定は以上です.

試してみる

公開を選択

ツイートされた

 

Written by ngi644

12月 21st, 2011 at 11:59 pm

Posted in Zope/Plone

オープンソースOCWのeduCommons

without comments

みなさん、こんにちは。 本日は、私がPlone4 アドベントカレンダー2011の担当します。

オープンコースウェア

オープンコースウェア(OCW)を皆さんご存知でしょうか? これは、大学の講義をインターネットを使って無償で提供するという活動です。 代表例は、MITOCWサイトでしょう。私もたまに利用しています。

eduCommons

eduCommonsは、教育機関がOCWを簡単に導入するためのアプリケーションです。OCWの担当者は、一番重要な、コンテンツに集中することができます。このeduCommonsは、Ploneをベースに作られています。今年、Plone4をベースとしたeduCommons4がリリースされました。ベースのPlone4のパフォーマンスが上がっているので、eduCommons4の性能も上がっていることが期待できます。

まず、どんなものかを見てみたい人は、educomonns.comにデモサイト(http://demo.educommons.com/)があるので使ってみるといいでしょう。

http://demo.educommons.com/

日本にもeduCommonsを使って活動している大学を紹介します。どれも、貴重な講義が掲載されていて一見の価値があります。

おわりに

Plone4を使って作られた教育向けアプリケーションの紹介をしました。もう一回、担当があるので、次回は、Plone4を使った開発のことについて書きたいと思います。

リンク

 

 

Written by ngi644

12月 14th, 2011 at 7:58 pm

Posted in Zope/Plone

SSO利用時のlogoutスクリプト

without comments

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

Written by ngi644

5月 31st, 2011 at 12:17 pm

Posted in Zope/Plone

Blobのファイルはどこに保存されている?

without comments

明けましておめでとうございます。と言っても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になっているぽい。

今年もよろしくお願いいたします。

Written by ngi644

1月 21st, 2011 at 6:36 pm

Posted in Zope/Plone

collective.xdv でコンテンツタイプごとのテーマテンプレート切り替え

without comments

collective.xdv

今まで、テーマテンプレートとルールを切り替えるのは、「コントロールパネルでできる、URLの正規表現マッチだけ。」と思っていた。

でも、こいつは、diazo(xdv)サーバーを使っている。だから、diazo(xdv)の書き方にそって、ルール内に<theme />タグで書いてあげれば、コンテンツタイプごとに切り替えだってできるのだ。

たとえば、ドキュメントコンテンツタイプでテンプレートを切り替えるには、 <theme href=”sample.html” css:if-content=”body.portaltype-document”/> てな感じで簡単に切り替えができる。

これができたので、ルールのネストなんかもできるに違いない!後日テストしよう。

Written by ngi644

11月 25th, 2010 at 6:01 pm

Posted in Python,Zope/Plone

ロゴとフッターを変えるプロダクト

without comments

Plone4のデザインは、素敵だけど、ロゴとフッターの変更が面倒だと常々感じる。TTTWで変更できるけど、ZMIにアクセスして、base_propertiesをいじったり、Page templateファイルをいじったりしないといけない。

Ploneには、サイト設定という場所がある。なぜ、ロゴとフッターを変更するというサイト作成において、重要なものがないのだろうか?と思っていた。

そこで、今回、さくっと作ってみた。Plone4でしかテストしていないけど、とりあえず、動いている感じ。

ngi.theme.simple

http://pypi.python.org/pypi/ngi.theme.simple/1.0b3

override.zcmlを使ったりとちょっと?というところもあるけど、それは、これから直していきます。

適用前

設定画面 フッターはHTMLタグも使えます。

適用後

Written by ngi644

10月 30th, 2010 at 8:36 pm

Posted in Python,Zope/Plone

Plone で動くBlogプロダクト

with 2 comments

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

Written by ngi644

8月 27th, 2010 at 11:54 am

Posted in Zope/Plone

Plone 4 dev用buildout

without comments

以下、最近利用する頻度が多くなってきたのでメモしておく。

Plone4 のbuildoutの場所

http://svn.plone.org/svn/plone/buildouts/plone-coredev/branches/4.0/

Written by ngi644

7月 21st, 2010 at 2:40 am

Posted in Zope/Plone

MeeGo に Plone4 をインストールするために必要な物

without comments

MeeGoというIntelとNokiaによるLinuxOSを使い始めた.このOSのUIはかわいくて使っていて楽しくなる.これを開発用にしようと思い,Plone4 Unifiedinstallerをインストールしてみた.インストールする為に必要なパッケージの一覧は下記である.

  • make
  • gcc-c++
  • zlib-devel
  • libjpeg-devel
  • readline-devel

これらをyumを使ってインストールする.これでPlone4をインストールして利用することが出来る.

PloneonMeeGo

Written by ngi644

7月 1st, 2010 at 12:09 am

Posted in Linux,MeeGo,Zope/Plone

Plone4のpoファイルのコンパイルオプション

without comments

Plone 4のUnified Installerには、下記の記述がbuildoutファイルにないので、poファイルがコンパイルされない。そのため、自分で作ったプロダクト等の翻訳が適用されないで焦るときがある。そんなときは、下記の記述の確認をし、無ければ、buildout.cfgなどに追加してあげるとよい。

[instance]
environment-vars =
zope_i18n_compile_mo_files = true

以上、忘れずにメモしておく。

Written by ngi644

6月 4th, 2010 at 7:59 pm

Posted in Zope/Plone

Ploneのサイト管理でスキンカスタマイズ「Theme Editor」

without comments

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で作業ができるので、とても重宝しそうです。

Written by ngi644

5月 31st, 2010 at 7:10 pm

Posted in Zope/Plone

Ploneのフォームで2重投稿を禁止するJSの回避方法

without comments

Ploneは、フォームで2重投稿を極力避けるために、jQueryを使ってアラートを出すようにしています。

これは、目的によっては、邪魔な存在なので、表示させない方法。

submitボタンのクラスに allowMultiSubmit を割り当てる。

以上で回避できます。

Written by ngi644

2月 2nd, 2010 at 1:49 pm

Posted in Zope/Plone

Windows版のPlone

without comments

Windows版のPlone 4は、portal_css, portal_javascriptsをデバッグモードにしておくと、非常に遅い!!!

スキンプロダクトの作成や、ビュー周りの検証をするときは、Linuxか、MacにインストールしたPlone 4を使うとよい。

Written by ngi644

2月 2nd, 2010 at 4:13 am

Posted in Zope/Plone

フォルダが作成出来ないと嘆いていたら。

without comments

Flashからフォルダを作成出来るようにしていたのですが、どうもうまく動かない。

プロセスもpermissionにも間違い無いはずなのに、なぜ動かないのだろう。

いろいろと調べていたら・・・

テスト環境にフォルダを作成する為のメソッド名と同名のPythonスクリプトが存在した・・・。

・・・・・・・・・・・・。

さあ、次に進むぞ。

Written by ngi644

1月 28th, 2010 at 3:11 am

Posted in Zope/Plone

反省

without comments

Flash部分にどのぐらいのコストをかけ、Ploneの部分にどのぐらいのコストをかけるかというのをはっきりとしておくべきだった。

反省・・・。

Written by ngi644

1月 28th, 2010 at 1:13 am

Posted in Zope/Plone