1

Plone を使用するにあたり、 DocumentViewer 製品を Plone アプリケーションに統合して、PDF ファイルを表示できるようにしました。ドキュメント ビューアー アドオン製品は、コントロール パネルの設定、つまり[サイトの設定] -> [ドキュメント ビューアーの設定]で表示できる一連のスキーマ/フィールドを定義しています。

フィールド/スキーマがどのように定義されているかをここで確認できます

IGlobalDocumentViewerSettingsここで、example.product でオーバーライドして、インターフェイスに別のフィールドを追加したいと考えています。

SchemaExtenderはアーキタイプではないため、使用できないと思います。また、このリンクで提供されている指示に従ってみましたが、役に立ちませんでした。製品を再インストールできますが、追加したフィールドが表示されません。

これが私のコードのサンプルです:

from collective.documentviewer.interfaces import IGlobalDocumentViewerSettings
from collective.documentviewer.interfaces import IDocumentViewerSettings
from zope import schema
from zope.interface import implements

class DocViewerSchemaProvider(object):
    implements(IGlobalDocumentViewerSettings)

    def getSchema(self):
        """
        """
        return IEnhancedDocumentViewerSchema

class IEnhancedDocumentViewerSchema(IDocumentViewerSettings):
    """ 
    Use all the fields from the default schema, and add various extra fields.
    """

    folder_location = schema.TextLine(
        title=u"Default folder location",
        description=u'This folder will be created in the Plone root folder. '
                    u'Plone client must have write access to directory.',
        default=u"files_folder")

この特定のインターフェイスをオーバーライドする方法について誰か助けてもらえますか?

4

1 に答える 1

3

作成者 (私) はこれを簡単にオーバーライドできなかったので、オーバーライドを行うのは少し複雑になります。次の手順を実行する必要があります。警告ですが、これはすべて疑似コードであるため、機能させるには微調整が必​​要になる場合があります。

まず、カスタマイズしたいインターフェースを拡張して、カスタマイズしたインターフェースを提供します。

class IEnhancedDocumentViewerSchema(IGlobalDocumentViewerSettings):
    """ 
    Use all the fields from the default schema, and add various extra fields.
    """

    folder_location = schema.TextLine(
        title=u"Default folder location",
        description=u'This folder will be created in the Plone root folder. '
                    u'Plone client must have write access to directory.',
        default=u"files_folder")

次に、スキーマの設定を保存および取得するために使用される設定アダプターを作成します。

from collective.documentviewer.settings import Base
class CustomSettings(Base):
    implements(IEnhancedDocumentViewerSchema)
    use_interface = IEnhancedDocumentViewerSchema

次に、アダプタを登録します::

<adapter 
    for="Products.CMFPlone.interfaces.IPloneSiteRoot"
    provides="my.product.interfaces.IEnhancedDocumentViewerSchema"
    factory=".somewhere.CustomSettings" />

次に、カスタム スキーマを使用してフォームを作成します::

from z3c.form import field
from plone.app.z3cform.layout import wrap_form
from collective.documentviewer.views import GlobalSettingsForm
class CustomGlobalSettingsForm(GlobalSettingsForm):
    fields = field.Fields(IEnhancedDocumentViewerSchema)
CustomGlobalSettingsFormView = wrap_form(CustomGlobalSettingsForm)

次に、製品のカスタマイズ レイヤーを作成し、documentviewer レイヤーを拡張します。これには 2 つの手順が必要です。まず、レイヤ インターフェイスを追加します::

from collective.documentviewer.interfaces import ILayer as IDocumentViewerLayer
class ICustomLayer(IDocumentViewerLayer):
    """
    custom layer class
    """

そして、一般的なセットアップでレイヤーを登録します。xml ファイル browserlayer.xml を次の内容でプロファイルに追加します (レイヤーが登録されるように、製品を再インストールしてください):

<?xml version="1.0"?>
<layers name="" meta_type="ComponentRegistry">
    <layer name="my.product" 
           interface="my.product.interfaces.ICustomLayer" />
</layers>

最後に、グローバル設定ビューを、製品用に登録したレイヤー用のカスタム フォームで上書きします::

<browser:page
    name="global-documentviewer-settings"
    for="Products.CMFPlone.interfaces.IPloneSiteRoot"
    class=".somewhere.CustomGlobalSettingsFormView"
    layer=".interfaces.ICustomLayer"
    permission="cmf.ManagePortal" />

うーん、難しすぎました。

于 2013-01-30T21:22:04.903 に答える