Plone

デバッグ方法

というほどでもないのですが、忘れないうちにメモ。(buildout環境が前提です) フォアグラウンド実行 Zopeインスタンスは、通常、バックグラウンドで実行されますが、デバッグ用としては、次のコマンドでフォアグラウンド実行します。 $ bin/instance fgフォ…

日本語名ファイルのダウンロード

ファイル名にマルチバイトが使われていた場合、ダウンロードの際、デフォルトではASCIIコードのみに変換されたおかしなファイル名になります。 この問題には、以前からCMSコミュニケーションズの寺田さんという方が取組んでらっしゃいます。(チケットがwont…

タイトルのないコンテンツタイプを作る

タイトルのないコンテンツタイプといえば、Title-less Typeに書かれた方法が有名ですが、もっと簡単な方法がありました。 やることは次の2つです。 スキーマからTitleを削除する。 コンテンツのクラスにTitleメソッドを用意する。 スキーマからTitleを削除…

idの自動設定

Ploneで作成したコンテンツのshort name(=id属性)は、デフォルトでは、コンテンツ作成時にTitle属性から自動的に作られる(詳しくは、Normalizing ids を参照)。通常はこれで問題ないが、id属性はURLの一部となるので、コンテンツに設定したフィールドの値と…

ATBlobの継承(SchemaExtender)

やり方が分かったので、メモしておく。 FileFieldが出なかった原因 FileFieldが表示されなかったのは、ATBlobクラスのスキーマ定義に含まれていなかったから。Plone4でカスタムコンテンツタイプ作ろうと思ったらハマった(その2) に書いたように、FileField…

aws.zope2zcmldoc

Ploneをイジっていると、必ずZCMLがついて回ります。よく使うZCMLディレクティブならまだ覚えてしまうかも知れませんが、たまにしか触らない私のような者は、まず覚えられません。ディレクティブが定義されているmeta.zcmlを調べたりすることもありますが、…

SchemaExtender

PyPIのパッケージ説明にサンプルが載っているけど、これだけではよく分からない。結局のところ、ZCML周りをよく理解していないので、そこも含めたサンプルがほしい。 ということで、Google先生に聞いてみると、Using archetypes.schemaextender to Tweak Exi…

Plone4でカスタムコンテンツタイプ作ろうと思ったらハマった(その2)

ひとまず、チュートリアルはできたので、Fileタイプを継承したものを作ることにした。まず、ATFileを継承して作ったのだが、コンテンツタブに表示させた時に、アイコンが表示されない。色々、調べているうちに、Plone4の'File'は、ATFileではないことに気付…

Plone4でカスタムコンテンツタイプ作ろうと思ったらハマった(その1)

最近、久しぶりにPloneを触っている。しばらく、触ってないので、新しい技術についていくのに時間が掛る。とりあえず、分かったことについてメモっておく。 インストール:開発用にはLinux/BSD/OSXが吉 以前からそうだったかも知れないが、Windowsインストー…

デベロッパ向けクイックリファレンス

"Six Feet Up"という企業が、Ploneデベロッパ向けクイックリファレンスカードを自社サイトに掲示しています。今のところ、公開されているのは次の6つです。身近に置いておくと、とてもベンリです。 Generic Setup Quick Reference Card Buildout Quick Refe…

configure,zcmlでregisterProfileをしていると、依存関係のチェックがうまく働かない。

configure.zcmlの中に次のように記述しておくと、プロダクトのプロファイルを登録してくれます。 <configure xmlns="http://namespaces.zope.org/zope" xmlns:genericsetup="http://namespaces.zope.org/genericsetup" i18n_domain="MyProduct" > </configure>

GenericSetup を使って、コンテンツを作成する

GenericSetup を使うと、プロダクトのインストール時に、コンテンツを作ることができます。作り方は単純で、作成するコンテンツにマーカ・インタフェースを追加して、所要の設定ファイルを用意するだけです。この処理をやってくれるコードは、Procuts/CMFCor…

Archetypes:フィールドへのVocabularyの与え方

以下は、Products.Archetypes.Field.FieldクラスのVocabularyメソッドのdocstringです。 Returns a DisplayList. Uses self.vocabulary as source. 1) Static vocabulary - is already a DisplayList - is a list of 2-tuples with strings (see above) - is…

default-zpublisher-encoding

プロダクトのプロファイルにactions.xmlを入れて、サイト・アクションのタイトルを日本語にしたら、インストールの際にエラーが出る。調べてみると、ZPublisherのデフォルト・エンコーディングがiso-8859-15になっているのが原因らしい。どこで設定したらよ…

コピーしたオブジェクトのid

オブジェクトを同じフォルダ上にコピーすると、idがカブるので、自動的に"copy_of_hoge"とidを振ってくれます。この処理は、OFS.CopySupport.CopyContainerクラスの_get_id()メソッドでやってます。例えば、"copy_of_"を,日本語Windowsのように"コピー〜"と…

Versioning

Plone3.1のバージョニング機能は、CMFEditionsによって実現されている。コンテンツ・タイプごとに、バージョニングのON/OFF、保存のたびに自動でバージョンを更新するか、ユーザが指定してやるのか、を選ぶことができるらしい。これまで使ってきたところでは…

Acuisition

Acquisitionのtest.pyを読んでみました。Acquisitionは、オブジェクトの属性を、その環境から取得するためのメカニズム。継承に似てるけど、継承の階層をトラバースするんじゃなくて、包含関係をトラバースする。下の例のように、ExtensionClass.Baseをmix-i…

membrane

ちょっとコードを読んだのでメモ インタフェース IMembraneUserRoles IUserRelated と PASのIRolesPluginを継承 実装クラスはRolesとGroupAwareRoles IMembraneUserGroups IUserRelated と PASのIGroupsPluginを継承 実装クラスはGroupsとSelectedGroups。ど…

GenericSetup:カスタムimport-stepの削除

import-steps.xmlを定義してあるプロダクトを一旦インストールすると、プロダクトをアンストール、削除しても、登録されたimport-stepが残ってしまいます。今のところ、portal_setupツールを使って削除することもできないようです。 Externalメソッドを使っ…

ArcheTypes:Titleのないタイプ

タイトルは、ブレッドクラムや検索結果、フォルダの内容一覧などで使われるので、本当にタイトルのないコンテンツ・タイプを作ることはできません。でも、ユーザにtitleフィールドを入力させたり、表示したりせずに、どうにかして、実質的にタイトルのないタ…

ArcheTypes:validatorのメモ

コンテンツのクラスに validate_foo(newvalue) というメソッド(fooはフィールド名)を作っておくと、勝手に呼び出してくれます。やってくれるお利口さんは、Products.ArcheTypes.BaseObject.BaseObject.validate_fieldメソッドさんです。 def validate_field(…

ArcheTypes:Schemaフィールドの順序を変える

moveFieldメソッドを使うんだそうです。Reorder Schema Fields

BrowserDefaultMixin

ArcheTypesのプロダクトを作っていて、次のコードのように、BaseContentだけを継承したプロダクトを作ったら、デフォルトページが表示されません。オブジェクトが作成されていない訳ではありません。URLの後ろにviewとかeditとかつけたら、ちゃんと表示して…

ArcheTypes

プロダクトを作り始めると、やはりArcheTypesのコードが気になってくるもので、ちょっとArchetypeTool.pyを読んでみました。以下、テキトーにメモです。 registerType(klass, package=None): klassをコンテンツ・タイプとして、ArchetypesTool._types[]に登…

Genericセットアップでプロダクトの依存関係を指定

profiles/defaultにある、metadata.xmlに要素を追加すればよいらしい。 これは、hogememberがrememberに依存していることを示す例。この記述で、クイックインストーラ上の表示はうまく行きました。記述を間違うて、存在しないプロダクトを指定したりすると、…

membrane/remember

membrane/rememberをPlone3.1.5にインストールして、rememberに付属のsamplerememberを入れてみた。とりあえず、素直に動いていい感じ。 じゃぁ、ドキュメントに書いてあるとおり、samplerememberのプロダクト名/クラス名を変えて、カスタムプロダクトを作ろ…

Vistaの仮想化機能

PCを買い換えました。GatewayのGT5650jです。OSはデフォでVistaHomeです。こいつにPlone3.1.5を入れて、プロダクトを作って遊んでみようとしたのですが、VistaのUAC機能がウルさくってかないません。 プロダクトを作る訳ですから、当然のことながらc:\\Progr…

site_properties/typesUseViewActionInListings

ATFile を継承したプロダクトを作ってみましたが、どうもちょっと挙動が違います。ナビゲーションポートレットやフォルダで一覧表示されるときに、URLの末尾にviewがつきません。元のATFileはviewがつきます。 ちょっと調べてみると、/portal_properties/sit…

GenericSetup

Plone2.5以降では、プロダクトのインストールにGenericSetupという仕組みが使われているようです。ドキュメントをザッと読んでみたので、内容をメモしておきたいと思います。Understanding and Using GenericSetup in Plone プロファイルってなに? サイトま…

How to subclass an ATContentType in 7 Minutes(その4)

作成したXMIファイルを元に、コードを生成します。 archgenxml EvilZPTDocument.xmi プロダクトのフォルダが作成されますので、これをまるごとProductsフォルダにコピーします。Ploneを立上直し、[サイト設定]-[アドオンプロダクト]にEvilZPTDocumentが表示…