Direkt zum Inhalt | Direkt zur Navigation

Benutzerspezifische Werkzeuge

Sie sind hier: Startseite / Dokumentationen / Zope/Plone / Tipps & How-tos

Tipps & How-tos

Hilfreiche Tipps & How-tos für Plone.

Debugging von Zope/ZODB mit zopectl debug

Den ZEO-Client mit zopectl debug starten.
Dann kann man sich ausgehend von app wie folgt durch den Zope-Baum hangeln und direkt auf alles in der ZODB zugreifen.
z.B.

app.hosts.testseite

erhält man das Plone site-root von der Plone-Site die in /hosts/ liegt.

mit

get_transaction().commit()

kann man seine Transaktionen commiten.

Um sich mit der ZODB zu synchronisieren, kann man den folgenden Aufruf verwenden:

app._p_jar.sync()

Abstände zum Rand verkleinern

#content {
padding: 0.5em 0.5em 0 0.5em;
margin: 0em 0em 2em 0em;
}
#portal-column-one .visualPadding {
padding: 1em 0em 1em 1em;
}
#portal-column-two .visualPadding {
padding: 1em 1em 1em 0em;
}

Icons in der Navigation abschalten

#portlet-navigation-tree .visualIconPadding{
padding-left: 4px;
margin-left: 1px;
margin-bottom: 1px;
min-height: 1.6em;
height: auto;
line-height: 1.6em;
}
.navTreeItem a, .navTreeItem a:hover, .navTreeItem div {
background-image: none !important;
color:#001d33;
border: 1px !important; &dtml-borderStyle; #b3d1d1;
}
.navTreeItem a:hover{
background-color:#266ba0 !important;
color:#e1ebf3 !important;
border: 1px !important; &dtml-borderStyle; #266ba0;
}
.navTreeCurrentItem {
background-color:#6a9fc8 !important;
color:#001d33;
border: 1px !important; &dtml-borderStyle; #6a9fc8;
}

ATImage

Ein ATCT Image unterstützt folgende Darstellungsgrößen:

sizes= {
'large' : (768, 768),
'preview' : (400, 400),
'mini' : (200, 200),
'thumb' : (128, 128),
'tile' : (64, 64),
'icon' : (32, 32),
'listing' : (16, 16),
},

Diese werden in den ZPT z.B. in atct_album_view wie folgt eingesetzt:

<img tal:replace="structure python:image.tag(scale='mini', title=image.Description())" />

Scale besagt hier das die Images mini (maximal 200x200px groß) sein sollen.

Die Werte für mini, large & co kann man nur in der datei > /ATContentTypes/content/image.py ändern. Danach muss Zope neu gestartet werden. Weiterhin sollte man über das ATCT-tool im ZMI die Images neu scallieren lassen.

In der Default Einstellung wird das Original Bild, welches man mit "/image_view_fullscreen" anzeigen kann, nicht Skaliert.
Dieses Verhalten kann man für alle ATImage Objekte in folgender Datei ändern.
Die Einstellung wirkt sich aber auf die gesamte Zope Instance aus!!!

/ATContentTypes/etc/atcontenttypes.conf.in

<archetype ATImage>
# maximum file size in byte, kb or mb
max_file_size 2048kb
# maximum image dimension (w, h)
# 0,0 means no rescaling of the original image
max_image_dimension 1280,1024
</archetype>

Per URL kann man ATImage Objekte wie folgt aufrufen:
image_GROEßE also z.B. image_mini oder image_large

als URL dann: /bilder/bild.jpg/image_mini

Accessrules temporär abschalten?

an die URL folgende Anweisung anhängen: _SUPPRESS_ACCESSRULE

Das ist sehr nützlich wenn man sich ausgepserrt hat aus einem Ordner. :-)

Bei codierungsfehlern kann man zope wie folgt auf utf8 umstellen.

Unter site-packages die Datei sitecustomize.py mit folgendem Inhalt anlegen und Zope neu starten:

import sys
sys.setdefaultencoding('utf-8')

Dies ist aber nur als schnelle Notlösung gedacht. Am besten ist es den Fehler der Anwendung zu finden und zu beseitigen.

Zope im ZMI auf utf-8 umstellen

in zope-root > Properties eine Stringproperty mit dem Namen "management_page_charset" hinzu fügen und value auf "utf-8" setzen.

Ordner per Script von der Navigation ausschließen

Für den Ordner "test" im Plone-Root geht das wie folgt:

In der Install Methode (Install.py) eines Produktes einfach folgenden Wert setzen.

self.test._md['excludeFromNav'] = True

Bei Katalogabfragen den Inhalt von jedem Brainobject anzeigen

Im pdb oder in der debug-console von zope kann man wie folgt den inhalt eines Brainobjektes anzeigen.

results[0].__record_schema__

Damit bekommt man eine Liste mit keys die in dem Brainobject verfügbar sind.

Objekte in einem Folder ermitteln

here.getFolderContents(contentFilter, batch=True)

Funktioniert wie eine manuelle Suchabfrage über den portal_catalog.
Ist aber etwas leichter zu händeln. ;-)

E-Mails aus Python Scripten versenden

Zur Veranschaulichung einfach ein Stück code:

            mMsg = """
Content-type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
Für Sie wurde ein neuer Benutzeraccount auf tolleseite.de angelegt.

Sie können sich dort ab sofort mit dem Benutzernamen ( %s ) und dem Passwort ( %s ) anmelden.
URL: http://www.tolleseite.de

Bitte ändern Sie sobald wie möglich Ihr Passwort!

Mit freundlichen Grüßen
Ihr tolleseite.de Team
"""
mTo = email
mFrom = 'postmaster@tolleseite.de'
mSubj = 'Ihr neues Passwort für postmaster@tolleseite.de'
message = mMsg % (userid,passwd)
context.MailHost.send(message, mTo, mFrom, mSubj)