zope
Up one levelzopeでオブジェクト名を指定してレンダリング
http://docs.zope.org/zope2/zope2book/AdvDTML.html
<dtml-var expr="_.getitem('myDoc', 1)">
は、
<dtml-var myDoc>
と同じ。
- Category(s)
- zope
- The URL to Trackback this entry is:
- http://lightson.dip.jp/blog/seko/2719/tbping
Plone4.1.2をCentOS6にインストール
OSインストール
はじめての自宅サーバ構築 を参考にして、
- minimal desktop
- 開発ツール
でインストール
- 仮想サーバにインストールしたので、インストール後に停止し、ネットワークをbridgeに変更する。
- OSを起動して、ネットワーク設定で自動起動を設定。ifconfigコマンドでIPアドレスが取れていることを確認する。
- キーボードのアンダースコアが入力できない。
Firewallをオフにする :
# system-config-firewall-tui
selinuxをdisableに :
# vi /etc/selinux/config # This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=disabled # SELINUXTYPE= can take one of these two values: # targeted - Targeted processes are protected, # mls - Multi Level Security protection. SELINUXTYPE=targeted
設定後、リブートする。
Ploneのインストール
Plone4.1.2 unified install をダウンロード :
$ wget http://launchpad.net/plone/4.1/4.1.2/+download/Plone-4.1.2-UnifiedInstaller.tgz $ tar zxvf Plone-4.1.2-UnifiedInstaller.tgz $ cd Plone-4.1.2-UnifiedInstaller $ su - # ./install.sh standalone
10分くらいでインストールが終わり、デフォルトのユーザ名とパスワードが表示されるのでメモを取る :
Use the account information below to log into the Zope Management Interface The account has full 'Manager' privileges. Username: admin Password: xxxxxxxx This account is created when the object database is initialized. If you change the password later (which you should!), you'll need to use the new password.
デバッグモードで起動 :
# /usr/local/Plone/zinstance/bin/instance fg
ブラウザでサイトにアクセスして見えたら、Ploneサイトを追加する :
http://localhost:8080/
FTPを使えるようにする :
# vi /usr/local/Plone/zinstance/buildout.cfg
# Ports # ----- # Specify the port on which your Zope installation # will listen: http-address = 8080 ftp-address = 8021 これを追加
builoutする :
# cd /usr/local/Plone/zinstance/ # ./bin/buildout
zope.confの修正 :
# vi /usr/local/Plone/zinstance/parts/instance/etc/zope.conf
FTPの部分を追加 :
<http-server>
address 8080
</http-server>
<ftp-server>
address 8021
</ftp-server>
Zopeを一度止めて、デバッグモードで起動 :
# /usr/local/Plone/zinstance/bin/instance fg
エラーがでなけらば、通常モードで起動 :
# /usr/local/Plone/zinstance/bin/plonectl start
WorkFlowの変更
標準のワークフローでは、ページを作成したり、FTPでアップロードしたときには非表示になっている。 Plone3以降には、CMFPlacefulWorkflowというプロダクトが標準で入っている。 これを使うとフォルダー毎に異なったワークフローを割り当てることができまる。 次のようにすれば、作成してすぐに公開できる。
- 「サイト設定」-「アドオン」にいき、これを有効にする。
- Ploneの画面でワークフローを変更したいフォルダーにいき、「状態」-「ポリシー」を選び、単一状態ポリシー に設定する。
- Category(s)
- zope
- The URL to Trackback this entry is:
- http://lightson.dip.jp/blog/seko/2693/tbping
Plone4で、新規作成したりFTPでアップロードしたページをすぐに公開する方法
標準のワークフローでは、ページを作成したり、FTPでアップロードしたときには非表示になっています。
デフォルトで公開する方法を探していたのですが、この本にやり方が載っていました。
Plone3以降には、CMFPlacefulWorkflowというプロダクトが標準で入っています。 これを使うとフォルダー毎に異なったワークフローを割り当てることができるのです。
やり方は、次のとおりです。
- 「サイト設定」-「アドオン」にいき、これを有効にする。 - Ploneの画面でワークフローを変更したいフォルダーにいき、「状態」-「ポリシー」を選び、単一状態ポリシー に設定する。
とっても簡単です。既存のワークフローをコピーして、好みのワークフローを作ることもできるようです。
コンテンツルール を使う方法あるようです。
Ploneってすごいですね。
- Category(s)
- zope
- The URL to Trackback this entry is:
- http://lightson.dip.jp/blog/seko/2691/tbping
どのようにすればPloneにFTPでアップロードしたページを見えるようになるか?
質問1.今、あなたが抱えている問題は何か?2,3個書き出す。
- 体調が悪くて床屋にいけず、浮浪者のような頭になっている
- 五十肩が何ヶ月も治らない
- マカロニさんが忙しくて、相手をしてくれない
質問2.書き出した問題の中で一番解決したいものは何か?その問題を「どのようにすれば〜となるか?」という理想的な状況を想定した文章に書き換える。
- どのようにすればPloneにFTPでアップロードしたページを見えるようになるか?
質問3.現状はどうなっているか?何が起こっているか?何が感じられるか?どんな事実があるか?どんなデータがあるか?○:事実、☆:感情、△:オピニオン
- Ploneでページを作るとデフォルトで非表示になる
- FTPでPloneにテキストファイルをアップロードするとページが生成され、非表示となる。
- Ploneの画面からテキストファイルをファイルとしてアップロードすると、デフォルトで表示される。
- ワークフローでの対応が必要な気がするが、FTPで投入されたことをどうやって検知するのか分からない
質問4.解決策として何が可能か?
- 一つ一つ手で表示に変更する
- ワークフローをごにょごにょする
- 非表示でも見えるロールを作って、anonymousを割り当てる
- ブラウザをスクリプトで動かして、非表示を見つけて、表示に変える
- Ploneのpythonスクリプトで、非表示を表示に変える
質問5.質問4であげた解決策の中から、いつまでに、どれをやるか?
- 非表示でも見えるロールを作って、anonymousを割り当てる
- Ploneのpythonスクリプトで、非表示を表示に変える
質問6.実行する上での、メリット、デメリット、注意点は何か?
質問7.誰のどんなサポートがあればうまくいくか?(また、実行したことをサポータに伝える)
- The URL to Trackback this entry is:
- http://lightson.dip.jp/blog/seko/2690/tbping
Re:どのようにすればPloneにFTPでアップロードしたページを見えるようになるか?
>五十肩が何ヶ月も治らない
おいらは、1、2年かかりました。
>マカロニさんが忙しくて、相手をしてくれない
おじさんじゃだめでしょうねえ?
解決策として清く正しいのは、ドキュメントオブジェクトを生成するときにFTPからの要求及びその他(ユーザーID)などであれば状態を「公開」にする。
FTPかどうかは多分REQUESTオブジェクトにポート番号8021が入って来ると思いたい!!
Re:どのようにすればPloneにFTPでアップロードしたページを見えるようになるか?
Plone4の「コンテンツルール」を使ったら簡単に実現できました。
Re:どのようにすればPloneにFTPでアップロードしたページを見えるようになるか?
Macbook AirのFTPクライアント
Windowsマシンがあまりにも遅いので、最近は Macbook Air を使っています。
WindowsのFTPクライアントならFFFTPあたりが定番ですが、Macでは何がいいのか分かりません。
今回は、Firefoxのアドインである FireFTP を使ってみました。 21ポート以外も設定できるので、Ploneの8021ポートにも無事接続できました。 ファイルを入れたり、取り出したりするだけなら、これで問題なさそうです。
- The URL to Trackback this entry is:
- http://lightson.dip.jp/blog/seko/2689/tbping
Ploneへの入力をメールから行うpython スクリプトの巻
インターネットで情報を見つけたとき、Ploneサイトにアクセスして、コピペするのは面倒ですね。
そこで、メールで届いた内容をpop3でアクセスして取り出し、テキストファイルを生成し、FTPでPloneにアップロードするpythonスクリプトを書いてみました。メールの添付ファイルはとりあえず、スクリプトと同じ場所に保存するだけで、アップロードはしていません。
これを使えば、気になる情報をメールで送るだけで、Ploneの記事になります。
予めPloneのFTPを使えるようにしておく必要があります。やり方は、Papasanのサイト を見てください。
Windows上のpython2.6で作り、CentOS5で動作を確認したらpythonのバージョンが2.4のせいで、動きませんでした。 Unified InstallerでPloneをインストールした際にpython2.6が入ったので、それを使えばOKでした。
課題としては、アップロードされた文書はそのままでは非公開になっているので、一般の人に見せるには一つ一つ手で公開にする必要があることです。最初から公開にする方法を知りたいです。
参考にさせていただいたところ:
# -*- coding: utf-8 -*-
import os
import poplib
import datetime
import email
from email.Header import Header,make_header,decode_header
import ftplib
import time
def mailread(src,mypath):
"""
生メールから件名、本文、添付ファイルを取り出す
"""
# Messageオブジェクトを作る
msg = email.message_from_string(src)
# ヘッダをデコード
subject = decode_header(msg["Subject"])
# ヘッダーを表示
try:
print "-" * 70
#print msg["Date"]
st = datetime.datetime.strptime(msg["Date"][:-6], "%a, %d %b %Y %H:%M:%S")
delivered_date = st.strftime("%Y/%m/%d %H:%M:%S") + " GMT+9"
my_id = st.strftime("%Y%m%d-%H%M%S")
#print unicode(make_header(subject))
except: pass;
print "-" * 70
#全パートをスキャン
for part in msg.walk():
type =part.get_content_maintype()
#print type
if type and type.find("image") != -1:
#画像が見つかったら、ファイルに保存
filename = part.get_filename("notitle.img")
f = open (os.path.join(mypath,filename),"wb")
f.write(part.get_payload(decode=True))
f.close()
if type and type.find("application") != -1:
#EXCELやWordがあったらファイルに保存
filename = part.get_filename("notitle.img")
f = open (os.path.join(mypath,filename),"wb")
f.write(part.get_payload(decode=True))
f.close()
if type and type.find("text") !=-1:
#テキストは表示
enc = part.get_charsets()[0] or "us-ascii"
body = part.get_payload().decode(enc,"ignore")
return my_id ,delivered_date, unicode(make_header(subject)), body, msg
def upload_ftp(server,port,username,password,directory,upfilename):
ftp = ftplib.FTP()
ftp.connect(server,port)
print " connect ok"
ftp.login(username, password)
print "login ok"
ftp.cwd(directory)
print "CD ok"
# upload file
print upfilename
upfile = open(upfilename, "rb")
ftp.storbinary("STOR %s" % upfilename, upfile)
upfile.close()
ftp.quit()
def set_headers():
headers ="""id:
title:
description:
subject:
relatedItems:
location:
language: ja
effectiveDate:
expirationDate: None
creation_date:
modification_date:
creators: admin
contributors:
rights:
allowDiscussion: False
excludeFromNav: False
presentation: False
tableContents: False
Content-Type: text/html
"""
return headers
####################### Main ##############################
# interval設定 sec
interval = 1 * 60
# FTPサーバ設定
ftp_server = "servername"
ftp_port = 8021
ftp_user = "admin"
ftp_password = "xxxxx"
ftp_directory = "/Plone/frommail"
# メール基本設定
mail_server = "servername"
pop3_port = 110
user_id = "user"
user_pass = "password"
# pathの取得
mypath = os.getcwd()
while 1:
# メールサーバに接続
pop3 = poplib.POP3(mail_server,pop3_port)
pop3.user(user_id)
pop3.pass_(user_pass)
# メール一覧の取得
mail_list = pop3.list()
print mail_list
# メールのリストは[1]にある
for mail_id in mail_list[1]:
(no,msg_size) = mail_id.split(" ")
# 番号指定で取り出し
mail_data = pop3.retr(no)
my_id, delivered_date, title, body ,msg = mailread("\n".join(mail_data[1]),mypath)
print my_id,delivered_date, title
# ヘッダを行に分ける
lst = set_headers().split("\n")
# 作成日、更新日、発効日をメールの受信日に設定
n = 0
for line in lst:
if line in ("effectiveDate: ","creation_date: ","modification_date: "):
lst[n] = lst[n] + delivered_date
n = n + 1
lst[0] = lst[0] + my_id
lst[1] = lst[1] + title
lst[21] = lst[21] + body
# テキストファイルにまとめて、書き出す
txt = ""
for line in lst:
txt = txt + line + '\n'
file_name = os.path.join(mypath,my_id+'.txt')
o = open(file_name,'w')
# utf8なので先頭にBOMが必要
o.write('\xef\xbb\xbf')
o.write(txt.encode('utf8','ignore'))
o.close()
# FTPでアップロードする
upload_ftp(ftp_server,ftp_port,ftp_user,ftp_password,ftp_directory,my_id+'.txt')
# メールを削除
for mail_id in mail_list[1]:
(no,msg_size) = mail_id.split(" ")
pop3.dele(no)
# pop3 切断
pop3.quit()
# ある時間待つ
time.sleep(interval)
- The URL to Trackback this entry is:
- http://lightson.dip.jp/blog/seko/2682/tbping
Re:Ploneへの入力をメールから行うpython スクリプトの巻
Ploneのドキュメントオブジェクトを生成しているのですか?、それともZopeのファイルオブジェクト?
Re:Ploneへの入力をメールから行うpython スクリプトの巻
ただし、タイトルはファイル名になってしまいます。
Plone側で作った文書をFTPで取り出してみると、本文の前に20行くらいのヘッダーがついており、タイトル名や発行日、有効日、変更日などがありました。
このプログラムでは、ヘッダー部分を追加したテキストファイルを作り、アップロードしています。
Plone以下のフォルダーにアップロードしているので、Ploneのドキュメントオブジェクトではないかと思います。
デフォルトで公開できるでしょうか?
Re:Ploneへの入力をメールから行うpython スクリプトの巻
Ploneは細かな操作も考慮されていますので、できるような気がします。
ところで、Ploneのバージョンはいくつなのでしょう?
Plone4.05でPlone側からテキストファイルを、素のままアップロードしてみましたら自動的に公開になってしまいました。
>Plone側で作った文書をFTPで取り出してみると、本文の前に20行くらいのヘッダーがついており、タイトル名や発行日、有効日、変更日などがありました。
Plone側で作った文書じゃなくって、Plone側でアップロードしたファイルをFTPで取り出してみて、そのヘッダに合わせてみてはどうでしょうか?
Re:Ploneへの入力をメールから行うpython スクリプトの巻
>Plone側でアップロードしたファイルをFTPで取り出してみて、そのヘッダに合わせてみてはどうでしょうか?
それはいいアイデアです。
今、スープストック東京にいるので、部屋に帰ったらやってみます。
Re:Ploneへの入力をメールから行うpython スクリプトの巻
Re:Ploneへの入力をメールから行うpython スクリプトの巻
もしやと思ってグーグルで検索してみましたが、ありません。
そんな名前をつけたら、訴えられますね。
今は、ドトールコーヒーです。
おばさんが多いです。
Re:Ploneへの入力をメールから行うpython スクリプトの巻
散歩がてら近所のスーパーに犬用のハムを買いにいきました、おばさんしかいません。
渋谷まで行かないといけないのでしょうか?
Re:Ploneへの入力をメールから行うpython スクリプトの巻
Papasanのおっしゃるように公開されました。
しかし、アップロードされたファイルは、ファイルとして認識されており、ページにはなっていません。
これに対し、FTPからPloneのフォルダーにテキストファイルをアップロードすると、添付ファイルではなくページができます。
そしてそのページは非公開になっています。
外はまた雨になってきました。さてさて、これからどうしましょう?
Re:Ploneへの入力をメールから行うpython スクリプトの巻
「ファイルでも公開できればいいのかな」と思っていましたが、「ページ」でないといけないのね。
>これに対し、FTPからPloneのフォルダーにテキストファイルをアップロードすると、添付ファイルではなくページができます。
そしてそのページは非公開になっています。
これは、面白いですね。こちらでも試してみます。Ploneのどんなメソッドが動いているのでしょうね?
Re:Ploneへの入力をメールから行うpython スクリプトの巻
FTPでテキストファイルをアップロードすると、「ページ」が生成されました。
コンテンツの状態は「非表示」です。
ワークフロー周辺か、ポータルファクトリーでドキュメントオブジェクト(ページ)を生成するメソッド付近をゴニョゴニョしないといけないのでしょうね?
がんばってね!!
Re:Ploneへの入力をメールから行うpython スクリプトの巻
マカロニさんとグラフ描く
今日はマカロニさんと、zopeとamCharts を使ってグラフを描きました。 マカロニさんが忙しいので、三ヶ月ぶりになります。
以前やりかけていたことは全部忘れていましたが、四時間ほどゴニョゴニョして、立派なグラフが出来ました。
マカロニさんも、「私はやればできる子」とご満悦でした。
- The URL to Trackback this entry is:
- http://lightson.dip.jp/blog/seko/2673/tbping
Plone4で MS Office ファイルの検索 失敗
PloneにEXCELやPowerPoint,wordなどのOfficeファイルをアップロードして、全文検索したいというニーズがあったのでテストしました。
環境は次のとおりです。
- OS:CentOS5.7 64bit version
- JRE:Version 6 Update 27 32bit RPM パッケージ
- Plone:4.1 unified installer
- c2.transform.msoffice 0.3.1
Wordファイル(多分office2000)をアップロードしたところ、検索することができました。しかし、Office2000のXLSファイル、OFFICE2003のXLSファイル、OFFICE2003のPowerpointファイルは検索できません。 LibreOffice のCalcでファイルを作り、Office2003 XMLモードで保存したものも検索できませんでした。
なお、JREとしてCentOSに標準で入っているものを使ったときは、Wordも含めたすべてのファイルが検索できませんでした。
# yum list | grep java で検索して、インストールされていたものをyum eraseしました。
うまくいけば、次のファイルが検索対象になるはずでした。
MS-Office files MS-Word 95-2000, XP, 2007 and xml-format MS-Excel 95-2000, XP, 2007 and xml-format MS-PowerPoint 95-2000, XP, 2007 and xml-format
インストール方法
# vi /usr/local/Plone/zinstance/buildout.cfg
[buildout] ... eggs = ... c2.transform.msofficeZCML slugについては、手順では次のように書かれていますが、buildout.cfgの中には[instance]というセクションはありません。 base.cfgというファイルにはそれらしきものがありますが、buildout.cfgの中にもzcml = というところがあったのので、そこに記入しました。
[instance] recipe = plone.recipe.zope2instance ... zcml = c2.transform.msoffice
# ./bin/buildout
Ploneをデバッグモードで起動します。
# /usr/local/Plone/zinstance/bin/instance stop # /usr/local/Plone/zinstance/bin/instance fg
操作していると次のようなメッセージがコンソールにでました。
2011-09-17 11:29:49 INFO ZServer HTTP server started at Sat Sep 17 11:29:49 2011
Hostname: 0.0.0.0
Port: 8080
2011-09-17 11:29:49 INFO Zope Set effective user to "plone"
2011-09-17 11:29:56 INFO Zope Ready to handle requests
2011-09-17 11:33:22 INFO GenericSetup.rolemap Role / permission map imported.
2011-09-17 11:33:22 INFO c2.transform.msoffice application/vnd.ms-word.document.macroEnabled.12 (Office Word 2007 XML macro enabled document) Mime type already installed, skipped
2011-09-17 11:33:22 INFO c2.transform.msoffice application/vnd.openxmlformats-officedocument.wordprocessingml.document (Office Word 2007 XML document) Mime type already installed, skipped
2011-09-17 11:33:22 INFO c2.transform.msoffice application/vnd.ms-powerpoint.presentation.macroEnabled.12 (Office Powerpoint 2007 macro-enabled XML presentation) Mime type already installed, skipped
2011-09-17 11:33:22 INFO c2.transform.msoffice application/vnd.openxmlformats-officedocument.presentationml.presentation (Office Powerpoint 2007 XML presentation) Mime type already installed, skipped
2011-09-17 11:33:22 INFO c2.transform.msoffice application/vnd.ms-excel.sheet.binary.macroEnabled.12 (Office Excel 2007 binary workbook (BIFF12)) Mime type already installed, skipped
2011-09-17 11:33:22 INFO c2.transform.msoffice application/vnd.ms-excel.sheet.macroEnabled.12 (Office Excel 2007 XML macro-enabled workbook) Mime type already installed, skipped
2011-09-17 11:33:22 INFO c2.transform.msoffice application/vnd.openxmlformats-officedocument.spreadsheetml.sheet (Office Excel 2007 XML workbook) Mime type already installed, skipped
2011-09-17 11:33:22 INFO GenericSetup.archetypetool Archetype tool imported.
- The URL to Trackback this entry is:
- http://lightson.dip.jp/blog/seko/2618/tbping
わらしのマップにゃ絵がでない
papasanのマップ の印にマウスを近づけるとストリートビューの絵が出るのに、私のマップ では絵が出ません。
どうなっとるんにゃ!!
- Category(s)
- zope
- The URL to Trackback this entry is:
- http://lightson.dip.jp/blog/seko/2616/tbping
Re:わらしのマップにゃ絵がでない
やっぱ、絵がでないとダメでしょう?
Re:わらしのマップにゃ絵がでない
既に他人事。。( ̄ヘ ̄;)ウーン
amChartでグラフを作る
今日は午後から、マカロニさんと一緒にzope上でグラフを作りました。 使ったのは、amChart です。
以前はFlashだけだったのですが、いつの間にかHTML5のchartがサポートされていました。
- The URL to Trackback this entry is:
- http://lightson.dip.jp/blog/seko/2533/tbping
何をなさろうとされているのか分かりませんが。
http://cocoatomo.iza-yoi.net/DIP/power_of_introspection/getattr.html
私のやりたかったことは、オブジェクトの名前を指定して、そのオブジェクトをレンダリングすることです。
<dtml-var expr="_.getitem('myDoc', 1)">の
'myDoc'のパラメータに変数名を指定できるのでしょうか?
私は、名前を指定してオブジェクトのレンダリングをさせるときは、次のようにパブリッシャー経由でおこなっています。
http://sample.zope.site?myDoc=hoge
hogeという名前のオブジェクトがレンダリングされます。hageではありません。