Plone 2.5...neue felder in der DB anlegen

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

Montag 21. August 2006, 12:42

Hi, also ich hab jetzt dieses Formular "personalize_form". Das Formular wurde von jemand bearbeitet und um Felder wie z.B. "Raum" und "Org.-Einheit". Jetzt soll es meine Aufgabe sein, die Daten die in die neuen Felder eingetragen werden auch in der Datenbank zu speichern.

Nur hab ich überhaupt keine Ahnung wo und wie das funktionieren soll.

Ich weiss einfach nicht wo ich meine Select bzw. Insert und update Statements dafür absetzen muss.
Dazu vermisse ich noch diesen Anblick wie bei MySQL, wo ich direkt an der DB sachen einstellen und test Statements absetzen konnte.
Ist so was auch bei Plone bzw. der DB Zope möglich? Wenn ja wie und wo?

Ich wäre euch für hilfreiche Tips sowie Internetseiten dankbar.

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

Montag 21. August 2006, 14:20

mitch hat geschrieben:Hi, also ich hab jetzt dieses Formular "personalize_form". Das Formular wurde von jemand bearbeitet und um Felder wie z.B. "Raum" und "Org.-Einheit". Jetzt soll es meine Aufgabe sein, die Daten die in die neuen Felder eingetragen werden auch in der Datenbank zu speichern.
Hi Mitch!

1. Lesen: http://www.derstappen-it.de/dokumentati ... r-benutzer

2. ``portal_membership`` --> Properties --> Neue Properties hinzufügen

3. ``portal_skins/plone_prefs/personalize_form`` an die neuen Properties anpassen.

4. ``portal_skins/plone_form_scripts/personalize`` um die neuen Felder erweitern.

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:

Donnerstag 24. August 2006, 16:14

Okay hi,

also ich glaube das Problem mit dem "member_search_form" beginnt schon früher.

Ich hab jetzt erstmal nachgeschaut ob der die Daten überhaupt speichert und das scheint nicht der fall zu sein, ich hab ein kleines script geschrieben um abzufragen wie der "raum" eines Member Objektes ist.
Ich hab bei "Meine Einstellungen" das Feld "raum" neu hinzugefügt, dieses Feld hab ich in den properties von portal_memberdata auch hinzugefügt ebenfalls hab ich das feld(den Wert) auch in dem Script "personalize" mit übergeben und in das Member- Objekt geschrieben.

Wenn ich in dem Formular "Meine Einstellungen" den "raum" ändere u speichere bleibt der auch da drin, auch wenn ich plone stope und neu starte ist das Formular im noch mit dem Wert gefüllt.

Aber wenn ich jetzt mit meinem python script den Wert des Member- Objektes abfrage kommt nix bzw. wenn ich das geburtsdatum abfrage, kommt dieser Standartwert wie ich bei portal_memberdata festgelegt habe.

Weiß jemand was ich falsch mach? Wieso schreibt der das nicht in mein Member- Objekt rein aber wieso steht das dann im Formular drin?

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

Donnerstag 24. August 2006, 16:22

Hi Mitch!

Leider kann ich mich jetzt nicht darum kümmern und der Sache nachgehen. Vielleicht kennt sich sonst noch jemand hier im Board mit Plone aus.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
juh
User
Beiträge: 27
Registriert: Dienstag 22. August 2006, 10:40
Wohnort: Solingen
Kontaktdaten:

Freitag 25. August 2006, 07:13

mitch hat geschrieben: Wenn ich in dem Formular "Meine Einstellungen" den "raum" ändere u speichere bleibt der auch da drin, auch wenn ich plone stope und neu starte ist das Formular im noch mit dem Wert gefüllt.
Hört sich verwirrend an. Bist du sicher, dass hier nicht der Browser-Cache dazwischenfunkt? Denn wenn der Wert in "Meine Einstellungen" erscheint, ist er auch gespeichert. Dann müsste in dem Suchskript was falsch sein.

juh
Software-Dokumentation mit Sphinx
http://www.amazon.de/dp/1497448689/
Paperback: 224 Seiten
Benutzeravatar
mitch
User
Beiträge: 78
Registriert: Dienstag 1. August 2006, 09:07
Kontaktdaten:

Freitag 25. August 2006, 10:28

hi,

ja ich glaub jetzt auch wieder das die Daten gespeichert werden aber an dem such script was nicht hin haut!

zum Beispiel weiß ich nicht was die Zeilen machen...ich kanns mir Vorstellen aber sicher bin ich nicht

Code: Alles auswählen

<div metal:fill-slot="main"
       tal:define="results python:mtool.searchForMembers(request);
                   Batch python:modules['Products.CMFPlone'].Batch;
                   DateTime python:modules['DateTime'].DateTime;
                   b_size python:12;b_start python:0;b_start request/b_start | b_start;">
JR
User
Beiträge: 286
Registriert: Montag 20. Februar 2006, 16:43
Wohnort: Berlin

Freitag 25. August 2006, 21:29

Hi Mitch,

zu deiner Frage, wie man in ZOPE mal schnell ein Statement an eine MySQL-Datenbank absetzt:

Du benötigst für eine Datenbank des MySQL-Servers eine Verbindung. Dazu habe ich in meinem Portalhauptordner folgendes ZOPE-Objekt angelegt:
Z MySQL Database Connection
Unter Database Connection String trägst du ein:
Name der Datenbank in MySQL@Host-ip:Portnummer Benutzername Kennwort

Also zum Beispiel:
db1@127.0.0.1:3306 Hans Schatzi
Unter Connect immediately machst du ein Häkchen. So ist Plone immer mit der Datenbank verbunden.

Um nun ein Statement zu testen gehst du wie folgt vor:
Leg in einem Ordner in ZOPE ein Z SQL Method-Objekt an.

Unter Connection Id gibst du die Id des Z MySQL Database Connection-Objekts an. Ins Textfenster kannst du nun zum Beispiel folgendes eingeben:

Code: Alles auswählen

SELECT
spalte1, spalte2, spalte3 
FROM Tabelle1 WHERE spalte1 > 5
Nach dem Abspeichern kannst du oben im ZOPE Fenster (ZMI) den Reiter Test auswählen und die Schaltfläche Submit Query drücken. Wenn dein Statement stimmt, wird dir das Ergebnis in einer unformatierten Tabelle angezeigt.

Ich würde dir gerne noch was zum Speichern von Daten und Anpassen von Ploneseiten schreiben, doch mein Besuch ist gerade gekommen und morgen früh geht es erstmal in den Urlaub :-)

Viel Glück
JR
Benutzeravatar
mitch
User
Beiträge: 78
Registriert: Dienstag 1. August 2006, 09:07
Kontaktdaten:

Montag 28. August 2006, 12:11

Hi,

mal eine ganz blöde Frage aber wie bekomme ich raus wie meine Datenbank heisst?

Ich arbeite ja mit Plone 2.5 und stelle da immer nur eigenschaften ein aber ich arbeite irgendwie nie an der Datenbank und daher weiss ich auch nicht wie die heißt, weil ich sie ja nicht selber mal angelegt hab!

mfg mitch
JR
User
Beiträge: 286
Registriert: Montag 20. Februar 2006, 16:43
Wohnort: Berlin

Montag 28. August 2006, 13:14

Hi Mitch,

entschuldige, aber da hab ich dich falsch verstanden. Ich selbst regel eigenes speichern generell über eine MySQL-Verbindung, da ich die ZOPE eigene Datenbank nicht direkt selbst verwende. Ich finde es besser, Layout und Daten komplett zu trennen.

Viele Grüße
JR
Benutzeravatar
mitch
User
Beiträge: 78
Registriert: Dienstag 1. August 2006, 09:07
Kontaktdaten:

Montag 28. August 2006, 13:25

Hi JR ,

dacht du bist im Urlaub... :P

hm also sozusagen schreibst du nix in diese "Datenbank" im Zope sondern alles in eine externe MySQL Datenbank?

Aber wenn ich die daten bei z.B. "Meine Einstellungen" speichere, müssen die doch irgendwo untergebracht sein und das wird doch wohl eine Tabelle sein und die will ich halt mal ansprechen.

Zu test zwecken hab ich da auch schon mal eine andere Tabelle angelegt im zope und das befüllen, abrufen und löschen gehen ohne Probs auf die Tabelle aber jetzt will ich halt die Daten aus der Zope Datenbank für mein portal_membership!

Wie machst du das da? Wie fängst du die Werte ab, die du z.B. mit dem "Meine Einstellungs" Formular speichern willst? Fängst du die überhaupt ab und gibst die an die MySQL DB weiter oder kann man die mittels plone irgendwie umleiten?

Hehe und kennst du nun eine Möglichkeit auf die Zope eigene DB zuzugreifen und abfragen zu stellen ?

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

Montag 28. August 2006, 13:49

mitch hat geschrieben:Hi, also ich hab jetzt dieses Formular "personalize_form". Das Formular wurde von jemand bearbeitet und um Felder wie z.B. "Raum" und "Org.-Einheit". Jetzt soll es meine Aufgabe sein, die Daten die in die neuen Felder eingetragen werden auch in der Datenbank zu speichern.
Hi Mitch!

Ich fange mal ganz vorne an:

Wozu sind diese zusätzlichen Informationen da? Wer braucht diese Info und wofür? Es ist nämlich nicht unbedingt einfach, diese Informationen auch für eine Suche bereitzustellen. Diese Informationen werden schlicht gesagt einfach an das Mitglied-Objekt angehängt.

Es ist schon möglich, diese Informationen auszulesen. Man kann auch alle Mitarbeiter durchlaufen und diese Informationen raus holen, aber in der normalen Suche, die für den Content programmiert wurde, tauchen diese Informationen nicht auf. Ob und wie diese Zusätzlichen Informationen über die Mitgliedersuche abrufbar sind, das müsste man durchforsten und selber herausfinden.

Dieser Aufwand, das heraus zu finden, ist nur dann sinnvoll, wenn er auch wirklich sinnvoll genützt wird. Aus einem CMS eine Mitarbeiterverwaltung zu programmieren ist kein guter Grund. Da muss schon etwas besseres dahinter stecken, denn ein Dokument (Seite) mit zusätzlichen Informationen über einen Mitarbeiter, kann man auch im "Persönlichen Ordner" eines jeden Mitglieds unterbringen. Das hat dann auch noch den Vorteil, dass man über die Content-Suche danach suchen kann.

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 28. August 2006, 14:09

Hi Mitch!

Ich habe mir jetzt mal einen Überblick verschafft.

Damit man nach zusätzlichen Feldern in der Mitgliedersuche suchen kann, muss man:

1.) Die Vorlage ``member_search_form`` anpassen.
2.) Die Vorlage ``member_search_results`` anpassen.
3.) Plone umprogrammieren :-(

Die Mitarbeitersuche ist in der Datei (im Dateisystem) ``Products\CMFPlone\MembershipTool.py`` in der Funktion ``searchForMembers`` verankert.

Code: Alles auswählen

        The following properties can be provided:
        - name
        - email
        - last_login_time
        - roles
        - groupname

        This is an 'AND' request.
Jedes Feld, nach dem man zusätzlich suchen möchte, müsste man hier eintragen **UND** die Suche so umprogrammieren, dass jedes gefundene Mitglied auch zusätzlich nach diesen Feldern gefiltert wird.

Und jetzt zu einem anderen Thema:

Zope speichert die Daten nicht in eine "Relationale Datenbank" sondern in eine "Objektorientierte Datenbank" -- genauer gesagt in die ZODB (var/data.fs). Relationale Datenbanken haben meist SQL als Abfragesprache. Das ist bei objektorientierten Datenbanken normalerweise nicht der Fall. Objektorientierte Datenbanken werden meist per Code durchsucht. Damit sich so eine Datenbank besser durchsuchen lässt, werden normalerweise "Index-Kataloge" angelegt. Auch Plone verwendet mehrere solche Kataloge. Für die Content-Suche ist der Katalog ``portal_catalog`` zuständig. Wenn du eine neue Seite erstellst oder änderst, dann wird von Plone automatisch eine Wortliste in den Katalog geschrieben.

Dieses besondere Verhalten ist auch der Grund, weshalb man unbedingt ein gutes Buch lesen sollte, bevor oder während man eine Plone-Website erstellt. Die Mitarbeitersuche ist ein Sonderfall. Das habe ich auch noch in keinem Buch gelesen. Aber der Quellcode spricht für sich.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
JR
User
Beiträge: 286
Registriert: Montag 20. Februar 2006, 16:43
Wohnort: Berlin

Montag 28. August 2006, 14:12

Hi Mitch,

ja, ich bin im Urlaub und hocke gerade im Controlraum eines Flugplatzes in Tschechien.
Also, wie man die ZOPE-DB zielgerichtet verwendet, weiß ich selbst noch nicht. Wie man eigene Felder einbaut und mit MySQL-Spalten verknüpft ist nicht so schnell beschrieben, doch schau dir doch mal das an:

Vor ein paar Monaten stand ich vor demselben Problem und mir wurde hier geholfen.
Ansonsten empfehle ich dir dringend zwei Bücher:

Plone - Das definitive Handbuch für Administratoren und Entwickler von Andy McKay (Addison-Wesley Verlag) und Python - Ge-Packt von Michael Weigend.

Also dann viel Glück!
Gruß
JR
Benutzeravatar
mitch
User
Beiträge: 78
Registriert: Dienstag 1. August 2006, 09:07
Kontaktdaten:

Dienstag 29. August 2006, 10:06

Hi,

danke Ihr beiden für eure Hilfe.

Das mit der Datenbank ist schon ein echt dumme Sache, da ich lieber mit SQL arbeite aber egal.
Ich glaube ich hab einen Fehler gemacht, ich hab nämlich die Änderungen nicht an der MembershipTool.py vorgenommen sondern an der membership.py im Ordner Plone/Data/Products/PlonePAS/tools.

Mir erst da mal aufgefallen, dass das wohl der Debugger dafür ist oder?
Oha könnt ihr mir da sagen an welcher Datein man eher arbeiten sollte?
Weil meine Änderungen die ich daran vorgenommen habe funktionieren bisher ganz ordentlich. :oops:
Ist es besser wenn ich die Änderungen da rückgängig zu mache (also die Standart Datei wieder dahin kopieren) oder sollte ich es lassen?

mfg mitch

PS: ich hab das Buch zur hälfte gelesen ( das definitive Handbuch für Administratoren ) aber ich muss sagen das es mir nicht sehr oft Helfen konnte, zumal die Versionen welche im Buch beschrieben wird und die Version die ich habe sich doch sehr unterscheiden. Vorallem für das Erstellen von Archtypes sind mir doch gehäuft unterschiede aufgefallen.
Viele dieser Abweichungen haben es mir nicht gerade leicht gemacht!
Des Weiteren heißt es auch, dass man Plone von einem Trainer lernen sollte, da hier die Methode learning by doing nicht so angebracht ist.
Tja ich betreibe die Methode learning by doing.. :P
Antworten