template vorlage für "dokument"

Django, Flask, Bottle, WSGI, CGI…
Benutzeravatar
mitch
User
Beiträge: 78
Registriert: Dienstag 1. August 2006, 09:07
Kontaktdaten:

Donnerstag 28. September 2006, 13:26

Hi,

normal ist es so, das ich bisher alle templates wie z.B. "search_for_members", "personalize_form" usw. im container plone/portal_skins/... gefunden hab und verändern konnte.

Jetzt kann man doch Ordner erstellen auf der Hauptseite von Plone und da kann man doch wählen z.B. "neuen Artikel hinzufügen" da wähle ich "Seite" aus und da öffnet sich ja so eine Seite wo ich den Titel, Beschreibung, Haupttext und referenz und so eintragen kann. Aber das Template will ich jetzt verändern, ein Feld einfügen und allgemein das Template anpassen aber wo liegt das ? Oder ist das etwas besonderes ?

mfg mitch
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Donnerstag 28. September 2006, 14:29

mitch hat geschrieben:das Template will ich jetzt verändern, ein Feld einfügen und allgemein das Template anpassen aber wo liegt das? Oder ist das etwas besonderes?
Hi mitch!

Erstens -- bitte verwende einen weniger animierten und evt. auch kleineren Banner für deine Signatur.

Zweitens -- jetzt wirds komplizierter :)

Seit den letzten Plone-Versionen (auch Plone 2.5) werden die Standard-Contenttypen mit **Archetypes** erstellt.

Du kannst also einen eigenen Archetypes-Contenttypen erstellen, also ein eigenes Plone-Produkt programmieren und damit neue Content-Typen erstellen.

- http://plone.org/products/archetypes/do ... loperGuide
- http://plone.org/products/archetypes/do ... l/quickref
- http://www.derstappen-it.de/dokumentati ... /ch13.rst/
- (deutsch) http://docs.neuroinf.de/PloneBook/ch13.rst

Die andere Variante ist, eine Seite (Pagetemplate) über das ZMI zu erstellen. Diese Seite ist dann aber von Plone aus nicht bearbeitbar. Es ist aber die einfachste Art, benutzerdefinierte Seiten ins Plone einzufügen.

Dafür kannst du dir einfach den Code aus der Pagetemplate ``portal_skins/plone_content/document_view`` kopieren und anpassen.

Willst du einen eigenen Content-Type erstellen, damit die Plone-Benutzer ohne dein Zutun neue (benutzerdefinierte) Seiten erstellen können, dann solltest du dich mit Archetypes anfreunden. -- Allerdings ist das nicht so einfach wie das Erstellen einer einzelnen Pagetemplate.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
mitch
User
Beiträge: 78
Registriert: Dienstag 1. August 2006, 09:07
Kontaktdaten:

Freitag 29. September 2006, 10:16

Hi gerold,

hab mir schon so was gedacht mit archtypes...

also ich hab mir Archetypes-1.4.0-final-Bundle.tar.gz runtergeladen und in den Products ordner entpackt... aber gebracht hat es nicht viel..

Der Seite zu folge, die du mir geschickt hast ist da irgendwo ein Beispiel namens "Article.py" dabei. Das hab ich irgendwie nicht gefunden bzw. war nicht dabei. Aber das sei ja auch mal dahin gestellt... ich will ja nur dieses Dokument "Seite" bearbeiten aber ich finde einfach diesen Archtyp nicht ...
Wo kann den der sein ? Ich steh da irgendwie voll auf dem Schlauch und komm nicht weiter! Kann mir da jemand helfen?

mfg mitch
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Freitag 29. September 2006, 10:59

mitch hat geschrieben:also ich hab mir Archetypes-1.4.0-final-Bundle.tar.gz runtergeladen und in den Products ordner entpackt...
Hi mitch!

Archetypes ist bei Plone schon mit dabei. Das darfst/solltest du nicht überschreiben. Es ist besser, wenn du das wieder rückgängig machst.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Freitag 29. September 2006, 11:07

mitch hat geschrieben:Der Seite zu folge, die du mir geschickt hast ist da irgendwo ein Beispiel namens "Article.py" dabei.
Hi mitch!

Das ändert sich ständig. Das Beispiel an sich finde ich auch nicht, aber im Ordner (im Dateisystem) ``Products\Archetypes\docs`` befindet sich die HTML-Seite ``archetypes_paper.html``. In dieser wird ein komplettes Beispiel erklärt. Mit dieser Hilfe sollte es nicht mehr so schwer sein, einen eigenen Archetypes-Contenttype zu erstellen.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Freitag 29. September 2006, 11:18

mitch hat geschrieben:ich will ja nur dieses Dokument "Seite" bearbeiten aber ich finde einfach diesen Archtyp nicht ...
Hi mitch!

Wenn du diesen Standard-Contenttyp änderst, dann wird ein Update auf eine neue Plone-Version mehr als schwierig.

Wenn du nur die Anzeige der Daten ändern möchtest, dann ist das ein relativ simples Unterfangen. Möchtest du aber zusätzliche Daten mit der "Seite" (Page) speichern, dann müsstest du direkt in den Plone-Quellcode eingreifen. Glaube mir -- das möchtest du nicht!!!

Mit Archetypes kannst du Content-Typen erstellen, die sich gleich oder ähnlich wie der Content-Typ "Document" verhält. Damit schießt du dir nicht bei jedem Plone-Update ins Bein.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
mitch
User
Beiträge: 78
Registriert: Dienstag 1. August 2006, 09:07
Kontaktdaten:

Freitag 6. Oktober 2006, 09:07

Hi,

danke gerold für deine Antworten. Hab mir schon gedacht, dass dieses unterfangen mit viel Problemen behaftet sein wird! :P
Okay, ich hab mir mal so ein ArchExample runtergeladen und versuche das jetzt so zu gestallten wie ich das brauche! Da muss ich zumindest kein Standard Dokument verändern!
Die Datei nennt sich Article.py ! Da versuche ich jetzt ein dropdown feld zu mache, wo alle members drin stehen! Aber das klappt nicht so wie ich will ! Ich bin ja noch ein frischling, was Archetypes angeht, vielleicht kannst du mir da auch helfen, wenn du eine Methode kennst die mir die Members ausliest! Die article.py liegt im Verzeichniss C:\programme\plone 2\data\products\archexamples\article.py falls dir/euch das hilft! Bin nur am rum probieren, weil es da kaum ordentliche aktuelle seiten drüber gibt! Das nervt mich mittlerweile!

mfg mitch
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Freitag 6. Oktober 2006, 17:14

mitch hat geschrieben:weil es da kaum ordentliche aktuelle seiten drüber gibt!
Hi Mitch!

Wenn du etwas am Code änderst, dann musst du Zope neu starten, das Produkt, welches du verändert hast, im ``portal_quickinstaller`` neu installieren und erst dann siehst du das Ergebnis der Änderung.

Ich schreibe gerade an einer kleinen Anleitung. Allerdings ist sie noch nicht ganz fertig, aber hier ist schon mal das was ich bis jetzt zusammengeschrieben habe:

http://gelb.bcom.at/trac/misc/wiki/Tuto ... tErstellen

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Samstag 7. Oktober 2006, 12:43

gerold hat geschrieben:Ich schreibe gerade an einer kleinen Anleitung. Allerdings ist sie noch nicht ganz fertig
So langsam beginnt die Anleitung Form anzunehmen. Es sollte ab jetzt schon recht deutlich hervorkommen, wie man ein Archetypes-Produkt für Plone erstellen und die Anzeige anpassen kann.

http://gelb.bcom.at/trac/misc/wiki/Tuto ... tErstellen

Es fehlt zwar noch die Listenanzeige, aber das ist nicht mehr notwendig um AT zu verstehen.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
mitch
User
Beiträge: 78
Registriert: Dienstag 1. August 2006, 09:07
Kontaktdaten:

Montag 9. Oktober 2006, 15:49

Hi gerold,

dank, ich hab dein tutorial mal durch gearbeitet aber leider konnte ich damit meine Frage auch nicht beantworten.

Wie oben schon geschrieben, will ich in ein archetype (bei mir ist das die article.py) so ein listen Feld erstellen, wo automatisch beim öffnen des dokumentes alle Mitarbeiter ausgelesen werden und in so ein listen Feld rein geschrieben werden.

Mein wille ist es ja, ein Ordner namens "Projekt" zu erstellen und darin werden dann Projekte erstellt (vorzugsweiße mit der article.py die ich auch später noch umbennen werde). Nun soll es möglich sein, dass pro projekt 5 Mitarbeiter beschäftig sein können und deshalb auch 5 solche listenfelder wo jeweils alle mitarbeiter drin stehen.
Wenn ich dann das projekt speichere, sollen der Name des Projektes auch noch bei dem jeweiligen Mitarbeiter eingetragen werden! Daran geh ich zur Zeit ein bisschen kaputt dran. :?

Deshalb will ich erstmal die Mitarbeiter da rein lesen und dann weiter sehen!

Ich wäre sehr froh über jede Hilfe!

mfg mitch ...
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Montag 9. Oktober 2006, 19:15

mitch hat geschrieben:alle Mitarbeiter ausgelesen werden
Hi mitch!

Das mit dem Auslesen der in Plone eingetragenen Mitglieder funktioniert so:

Code: Alles auswählen

## Script (Python) "get_members"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=
##title=
##
ms = container.portal_membership

retlist = []
members = ms.searchForMembers()
if members:
    for member in members:
        new = {"username": member.getUserName()}
        new["fullname"] = member.getProperty("fullname")
        retlist.append(new)

return retlist
Über den Rest denke ich noch nach bis ich ihn verstanden habe.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Montag 9. Oktober 2006, 20:04

Hi mitch!

:-)

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from Products.ATTest.config import PROJECTNAME

from Products.Archetypes.atapi import registerType
from Products.Archetypes.atapi import BaseContent, Schema
from Products.Archetypes.atapi import StringField
from Products.Archetypes.atapi import SelectionWidget


class Member5(BaseContent):
    """Member5"""
    
    portal_type = "Member5"
    meta_type = "Member5"
    archetype_name = "Member5"
    schema = BaseContent.schema.copy() + Schema(
        (
            StringField(
                "member1",
                required = True,
                vocabulary = "get_members",
                enforceVocabulary = True,
                index = "KeywordIndex", # erstellt autom. einen Index mit diesem Feld
                widget = SelectionWidget(
                    label = "Erster Mitarbeiter",
                    description = "Erster Mitarbeiter",
                    format = "select",
                ),
            ),
            StringField(
                "member2",
                required = False,
                vocabulary = "get_members",
                enforceVocabulary = True,
                index = "KeywordIndex", # erstellt autom. einen Index mit diesem Feld
                widget = SelectionWidget(
                    label = "Zweiter Mitarbeiter",
                    description = "Zweiter Mitarbeiter",
                    format = "select",
                ),
            ),
        ),
    )
    
    def get_members(self):
        ms = self.portal_membership
        
        retlist = []
        members = ms.searchForMembers()
        if members:
            for member in members:
                retlist.append(
                    (
                        member.getUserName(),
                        member.getProperty("fullname")
                    )
                )
        
        return retlist


# Klasse registrieren
registerType(Member5, PROJECTNAME)
``from Products.ATTest.config import PROJECTNAME`` --> ATTest ist der Ordner in dem das Produkt liegt. Das musst du natürlich an deine Gegebenheiten anpassen.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Montag 9. Oktober 2006, 20:23

Code: Alles auswählen

## Script (Python) "get_projects"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=username
##title=
##
cat = container.portal_catalog

return (
    cat.searchResults(getMember1 = username) + 
    cat.searchResults(getMember2 = username)
)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Montag 9. Oktober 2006, 20:35

Code: Alles auswählen

<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8" />
</head>
<body>

  <h1>Projekte bei denen Benutzer "aaaa" mitwirkt</h1>

  <tal:block tal:define="projects python:context.get_projects(username = 'aaaa')">
    <table border="1" tal:condition="projects">
      <tr>
        <th>Titel</th>
        <th>Id</th>
        <th>Url</th>
      </tr>
      <tal:block tal:repeat="project projects">
        <tr tal:define="project_object project/getObject">
          <td tal:content="project_object/Title" />
          <td tal:content="project_object/getId" />
          <td tal:content="project_object/absolute_url" />
        </tr>
      </tal:block>
    </table>
  </tal:block>
  
</body>
</html>
Ich glaube, so langsam kenne ich mich mit Archetypes ein wenig aus. :mrgreen:
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
mitch
User
Beiträge: 78
Registriert: Dienstag 1. August 2006, 09:07
Kontaktdaten:

Dienstag 10. Oktober 2006, 13:43

Hi gerold,

das mit dem Benutzer hatte ich mir auch schon so gedacht wie du das gemacht hast aber ich wusste halt null wo und wie ich da anfangen sollte! :idea:

So jetzt speicher ich dieses Objekt in mein Ordner Projekte ab, der auf der gleichen Ebene wie der Membersordner liegt.
Bsp.: Titel = Projekt SEK 3
Kurz Beschreibung = Personalmanagement Tool
Lange Beschreibung = bla bla bla bla
Mitarbeiter1 = mike brune
Mitarbeiter2 = adriano blasa

Wenn ich das so abspeichern will drücke ich ja einfach nur auf den "speichern" Button. Ich will den Button aber jetzt so bearbeiten, dass er den Titel und die beiden Mitarbeiter ausließt und bei den Persönlichen Einstellungen der Mitarbeiter das Feld "Projektbeteiligung" mit dem "Title" des Projektes füllt! Aber welches Script ist dafür verantwortlich bzw. wo liegt das Script für den gewissen "Speicher- Button" und wie mache ich das, dass ich die Einstellungen von dem Mitarbeiter Objekt überschreibe?

Ich hoffe du verstehst mein anliegen gerold ?!

mfg mitch

PS: Mein Chef versucht sich jetzt auch mal an deinem Tutorial! :wink:
Gesperrt