PloneMemo
Zope 2.7 の上で Plone 2.0 を動かすときの覚えがき
インストールまでは終わっているものとします。/plone にインスタンス生成したものとします. http://example.com/ で公開するものとします。
- Test サイトをひそかに作りたい
公開できる状態までは公開したくないサイトの場合、root のセキュリティタブで、View の anon を切ってしまうと、Basic Auth なしでは見れません。
- http://example.com/ 直下を plone にしたい
Windows 版バイナリ配布なんかはそうなってるけど、普通にLinux で入れるとそうできないですね。zope.conf なんかみてもそういう設定はないです。
これが正しいかどうかはおいといて apache との連携技で比較的簡単にできます。
- FastCGI の設定をします(このサイトにかいてあります)。2.7のzope.conf 側はかいてないですが、fastcgi で検索してコメントアウトしてport を設定するだけです
- root folder に Virtual Host Monster をadd (ほんと、置くだけ)します。
- plone folder に SiteRoot を追加。 base を http://example.com として path を / とします。
実は上記二項目はまとめてやらないとけっこうハマります。insufficient priv が多発。
結局、Zope, Apache, Bind(DNS名を振るので) のみっつを変更する必要があるわけです(ふぅ)
SiteRoot ですが、2.6.xまでに比べて改善されてると思います。ZMI側では効かなくなってるようです。
訂正:SiteRoot は不要です。詳しくは ApacheConf2 を参照下さい。
- user を作成したい
この状態にしてしまうと、plone 画面から user が追加できません。テスト用に必要なアカウントは plone フォルダ直下の acl_users を選んで、users タブを使うことによって追加することができます
一度、そうして manager な user を作れば、plone 画面の「plone の設定」から追加、変更もできます。
- Logo を変更したい
ロゴを自分で作ったものに変更するには /plone/portal_skins/plone_images にいって、logo.jpg をクリックし、「customize」ボタンを押します。で、custom フォルダに自動的に移動するので、そしたら、File data のところで、Browse... して Upload です。
- logo が jpg じゃないのですがどうすればいいでしょう
- Content-Type を image/gif とか image/png に変更して Save Changes します
- logo.jpg を logo.gif とか logo.png に Rename します。
- /plone/portal_skins/plone_styles にいき、base_propertiesをクリックして customize します。
- logoName という property があるので、これを、logo.gif とか logo.png にします
もちろん、exampleLogo.gif とかにしてもかまいません
- logo が jpg じゃないのですがどうすればいいでしょう
- Basic Auth はいいのですが、insufficient priviledges が出ます。
View を切っただけで、まともにSecurity を追ってないのでそうなります(^^;; もう一度 http://example.com/ を読みこめばいいです。 面倒なら /plone/portal_skins/plone_forms/insufficient_privileges を Customize するという方法もあります。
<p> または、<a href=
/>こちら</a>をクリックしてみてください。 </p>みたいのを付けくわえるとか。これはかなり adhoc ですし、i18n の形からは外れるので、それは覚悟の上で、です。
- Plone の Copyright 表示を example.com の Copyright 表示に替えたい
/plone/portal_skins/plone_templates/footer を Customize します。基本的には削るだけだと思いますが、localizer の働きを抑制するために、 <span i18n:translate="description_copyright_notrans"> とかにして、最新年表示の機能を生かす必要があるかもしれません。
- 一番下のミニバナーを Plone powered だけにしたい
/plone/portal_skins/plone_templates/colophon を Customize して、あとは削るだけです。colophon とは、本などによくある出版社のマークのようなもの、らしいです。
- メンバフォルダを作らないようにしたい
/plone/portal_menbership の configurations に Control creation of member areas というのがあって、そこのボタンで、ON/OFFを制御できます。OFFにすると、新規ユーザを作成してもフォルダを作成しません
- Members タブを押すとPython Scriptが動くようにしたい
試しに、/plone/portal_actions の Members の Action で TALES 式で適当な python script を呼びだしてみたら、その出力文字列を portal_url の後に付けたものを呼ぼうとするようでアウツ。
かといって、redirect すると plone じゃなくなりますね(x_x) #あたりまえか・・・
文字列(string:)でやっても同様。それに何が渡ってきてるんやら(^^;;・・・と、思ったら
- CMFDynamicDocument
というProduct があり、これの最新版使うとPlone のドキュメントに新たにダイナミックドキュメントが追加され、page template が使えるようになります。もちろん、Securityに注意する必要があるのは言うまでもないでしょう。具体的には、Add Dynamic Document , Change Dynamic Document の権限を Manager だけにするとか。
http://www.zope.org/Members/ensane/CMFDynamicDocument
TNX to mojix-san
これ、Install がちょっと特殊ですので、注意しましょう。External Method を作って、それを実行する必要があります。詳しくは INSTALL.txt に書いてあります。
で、ドキュメントからPython Script を呼べるようになりました。そしたら、/plone/scripts などというフォルダを plone の管理者画面からつくり、次に、ZMI からそのフォルダに Python Script を作ります。フォルダもZMIから作ってもいいのかな?でも念のため。
username_py というスクリプトを以下のような感じでつくります
- user名の取得 at python script
from AccessControl import getSecurityManager username = getSecurityManager().getUser() print "ようこそ", username, "さん" return printed
/plone/myMembers という Dynamic Document をPlone のフォルダ画面から作ります。一つだけ和訳されてなくて妙だけど、管理者からしか見えないから.poファイルをいじるのはやめておこう・・・(単なるめんどくさがりや)
なお、Dynamic Document の Id は、Plone からはいじれないみたいで、DynamicDocument.2004-04-10.2892921824 のような Id になります。ZMI で rename しても、Plone から見えるし、編集もできるので、ZMIで myMembers に変更します(うーむ)
内容は、Title, Description はそれなりに入れて、ドキュメント内に
<span tal:replace="python:container.scripts.username_py()"> junk </span>
とすれば、スクリプトが呼びだせます。
で、最後に /plone/portal_actions へいって、Members とほとんど同じ myMembers(idが。Name は Members)を追加し、その Action を string:$portal_url/myMembers にします。Condition も member に変更しておいたほうがいいでしょう(フォルダがなくてもいいように)。
ここで、actionの id と dynamic document の id を揃えておかないと、ポータルタブが selected(下とつながってる状態)になりません。
# Plone 的には正統派とは呼べないような気がしますが(^^;;
ddocument_view は、結構カスタマイズしないと見た目が揃わないので載せておきます。
- CMFDynamicDocument
- もう一段、文字の大きさを変えたい
この項目は2.0.4から意味なくなっちゃいました
Plone はデフォルトで 小・中・大の文字の大きさを選択できますが、もう一段分のアイコンやスタイルシートが入っています。これを有効にすると4段階にできます。やりかたは思ったより面倒でした(笑) # 探すのに疲れたともいう。
- まず、/plone/portal_actions にいき、Huge Text というアクションを作ります。
Name: Huge Text Id: huge_text Action: string:javascript-disabled:setActiveStyleSheet(
Huge Text,1) Condition: Permission: View Category: site_actions - 次に /plone/portal_actionicons に行き(左側のツリーには出ないです)ます。
'site_actions' 'huge_text' 'Huge Text' '0'
textsize_huge.gifで、Add します。 - これだけだと、実際のStyle Sheet名に変換しないので/plone/portal_skins/plone_templates/header を Customize します。
<!-- Alternate style sheets for the bigger/smaller text switcher --> というあたりを探し(全体の1/3くらい)、
<link rel="alternate stylesheet" type="text/css" media="screen" href=""
tal:attributes="href string:$portal_url/ploneTextHuge.css" title="Huge Text" />という行を追加します。
- ここまでの状態だと、二行になってしまいます。/plone/portal_skins/plone_styles/plone.css を Customizeします。
#portal-siteactions { という行を探し、width:72px; とします(54 だったので 4/3にしただけです)
- それぞれの大きさが大き/小さすぎるときには /plone/portal_skins/plone_styles/plone/ploneText???.css をCustomizeします
font-size が書いてあるだけですので、適切に数値に設定しなおします。
- まず、/plone/portal_actions にいき、Huge Text というアクションを作ります。
- 勝手にjoin させたくない
Root Folder の Security で Add portal member の anonymous を切ります。 http://example.com/join_form に直アクセスすると、フォームは出ますが、追加することはできません(ログインが必要です画面になります)
- 個人情報はメアドくらいでいい
/plone/portal_skins/plone_prefs の personalize_form を Customize して、あとはけずりまくりましょう。
- それに従って、個人情報の設定のところを「メアドの変更」くらいの名前にしたい
/plone/portal_controlpanel のActions にいって Id:MemberPrefs? の Name を「メアドの変更」にすればできます。
# i18n 無視しまくりです・・・
- よく考えてみたら、管理者は Epoz を使いたかった
それなら、けずるかわりに管理者にのみ見えるようにしましょう。
<div class="field" tal:condition="python: checkPermission(Manage portal, here)" tal:define="wysiwyg_editor python:request.get(wysiwyg_editor,...)" >のように、div のところで condition を加えます。
一つのタグには tal:condition は一つですので、condition が既存であれば、<span tal:condition=".."> みたいなので div なりなんなりをかこってしまいましょう
- MySQL に繋がらないのです
ZMySQLDA の db.py を修正しましょう。
#self.transactions = self.db.server_capabilities & CLIENT.TRANSACTIONS self.transactions = 1
- Query や Database ごとに Z SQL Method を作るのがめんどうです
あまり行儀よくないかもしれませんが・・・
- Z SQL Method を作ります。
Connection-Id を適切に設定し、内容は <dtml-var "REQUEST.form['sqlquery']?"> のみです。これは必要なデータベースの数だけ(Connection-Id の数だけ)必要です。db1, db2, db3 などと作ればいいです(具体的な名称のほうがいいと思いますが)。
- PythonScript を作ります。これは一つでいいです。
## Script (Python) "dbaccess" : ##parameters=db, query container.REQUEST.form['sqlquery'] = query return db() - 他のスクリプトから呼べます。
users = dbaccess(db1, "select * from user")
tuple の tuple が帰ってきます。もちろん、dict でアクセスもできます。
- Z SQL Method を作ります。
- Python Script から 変数を渡すDTML Method を呼びだしたいのですが
もはやまったくPlone の項目ではないと思いますが(笑)。
container.mydtmlmethod(None, container.REQUEST, varname1='ひとつめの変数の値です', varname2='次の変数です')
で呼びだせます。
- 特定のオブジェクトタイプの動作を変えたいのです。たとえば Dynamic Document のみせかたにオプションをつけるとか
- /plone/portal_types/ へいって、Dynamic Document を選びます。そして Actions タブを選びます
- Name: Test Id: test Action: string:${object_url}/test Permission:View Category: object
のようにして新しいアクションを作ります
- /plone/portal_skins/custom へいき、ddocument_view をコピペして、test という skin を作ります
内容は変更しなくてもいいです。というか、わたしにはあまり高度な変更ができないので(^^;;;;
- container.URL0.split()とかを使って、Python Script 内でなんとかしましょう
ぉぃぉぃ・・・でもそのほうが個人的には楽だったりします。
- 重いです。
そうですね。Zope そのものもそうですが、便利さと引き換え(というかいっしょ)に重さをもプレゼントしてくれます。
Apache をフロントに立たせて、icon などをキャッシュさせると相当速くはなります。あとは RAM Cache Manager を併用するとさらによいでしょう。Apache に cache させるほうは HTTP Cache Manage を適用しましょう。
設定は ApacheConf2 にまとめました。FastCGI にも間違いがあったので。
Zope 側 は CacheManager にまとめました。
それから、Zope 2.7 はデフォルトでデバッグモードが on です。instance/etc/zope.conf の中で
debug-mode off
を書くと速くなります。
- コンテンツ表示の右上にあるボタンで、「友達にメール」とかいらなくてプリントだけあればよいのですが
/plone/portal_actions/ にいって、Category が document actions のものを探して Visible をおとしていけば、プリントだけにできるでしょう。
- login したら、login_success をとばして、いきなり「メンバー」にとばしたい
plone/portal_skins/custom/login_success を Python Script にして
return container.REQUEST.RESPONSE.redirect(container.REQUEST.URL1 + "/Members")
と、すればうまくいくようです。
- allow_module(
datetime) しても datetime.today() が使えませんZope 上では DateTime というクラスが別に定義されてますので、そちらを使います。 DateTime?(time.time()) でいけます。
- external editor の設定のやりかたと使い方がわかりません
External Editor は便利ですよね。ただ、使ったことないと、どうしていいのかがさっぱりわからないかもしれないとは思います。
Plone を入れれば、External Editor のサーバ側の設定は不要です。クライアントのみ必要となりますが、Windows, Linux とも簡単です。
Windows の場合には zopeedit-win32-0.8.exe をダウンロードして実行するだけです。Linux の場合には zopeedit-0.8-src.tgz をダウンロードしてください。
で、tar xvzf zopeedit-0.8-src.tgz して cd して python setup.py install でOk です。
Mozilla の場合には、最初にペンマーク(External Editor 起動アイコン)を押したときに、ダイアログがでてきて、__zopeedit ってやつをどうするよ、と聞かれたときに、Open with で /home/zope/bin/zopeedit(適当に読み替えてください) を選んで、この型がきたら常にそうするチェックボックスをマークして OK ってのがお手軽だと思います。
いまも external editor で書いてますが快適です。てゆーか、長い Python script とか書くなら必須です。
.zope-external-edit については、editor = /usr/local/bin/emacsclient しか指定してません。python-mode.el はsite-lispに・・・
かけあしすぎるかもしれませんがとりあえず
- ZWiki を使ってますが、anonymous にも「履歴」「backlinks」が見えてしまいます。なんかかっこわるいです
えーと、ソースを追っても無駄です(それはあっしだ・・・)
plone/portal_types/Wiki Pageにいきまして、Actions タブをクリックします
そこを見ると History と Backlinks があるので、それぞれの Permission を Zwiki: Edit Page とかにすれば、書込み権限のあるヒトしか見えなくなるデス。
- 古いコンテンツにリンクされてますが、そっちはもう更新してないんですよ・・・一つにまとめたんです。
その古いコンテンツをdelete するか rename して、dtml-method を同名で作ります
<dtml-call "RESPONSE.redirect(
http://url.to/new/contents)">内容はこれだけでok です
- サイドスロット(ポートレット)を作ってみたいけど、検索してもよくわからないです。
意外と情報がないですね。とりあえず custom フォルダかなんかで、zpt で以下のようなファイルを作ります
<html xmlns:tal="http://xml.zope.org/namespaces/tal" xmlns:metal="http://xml.zope.org/namespaces/metal" i18n:domain="plone"> <body> <!-- The jack box --> <div metal:define-macro="portlet"> <div class="portlet" id="portlet-jacktest"> <h5>jack' portlet test</h5> <div class="portletBody"> test </div> </div> </div> </body> </html>これでスケルトンまではできます。あとはtal でがんばって書くとできる・・・**はず**です。とりあえず、右上に見えてると思いますが・・・
登録は、plone site のフォルダをZMIでクリックして、Properties から left/right_slot のところへいき、here/... とかマネして 最後にcustom フォルダで作った名前/macro/portlet (だったかな?ともかく上下と一緒)にすればいいです
- メンバーの中であったことがあるひとだけのためのWiki を作りたいです。で、みんな探せないと思うのでタブで出したいです。でも、その人たちだけにタブを出すってどうすればいいでしょう
ZWiki のインストールまではうまくいってると仮定します。
- Plone の Manager で適当なフォルダで、Plone Folder を新たにつくります。Plone サイト直下の /offme と、ここでは決めます。
- ZMI でそのフォルダに移動します。まず、みんなに見せる必要はないので、Offme という Role をそこで作りましょう。Security タブを選び、下のほうにいくと、User Defined Roles ってのがあるんで、Offme と入れて Add します。
- つづいて、そこで書きこめるようにします
- Access contents information(なぜか2つある)
- Add Documents, Images, and Files
- Add portal content
- List folder contents
- Modify portal content
- View
- Zwiki: なんちゃら(いっぱい)
の Acquire を切って(チェックを外す)、Offme と Manager だけにチェックを入れます。
View のAcquire を切ることにより、Offme Role を持たないひとに見えなくすることができます
- portal_actions で設定します
Name , Id は適当にやってください
Action: string:$portal_url/offme
Condition: python:member and member.has_role("Jzug")
Permisson: View
Category: portal_tabs
あたりでOKだと思います
- DTMLや Script を呼ぶタブを作る
- portal_types で Document をコピーしてMyDocument とでもする
- portal_types/MyDocument?/Actions で scirpt とか足して Action を string:$object_url/myscript とかする
- portal_skins/plone_content で document_view あたりを customize
- custom で myscript にrename
- 適当なところに以下のようなのを入れる :
<span tal:replace="structure python:container.scripts.dtmlact(None, request, scr = container.scripts)"> who </span>
- Plone site のトップに scripts という Plone Folder を作る
- dtml-act で REQUESTを表示 :
<dtml-var REQUEST>
- めでたくREQUEST のテーブルが表示できる
あとは好きなだけ書ける。