Datenbank Update Problem

am 05.05.2009 - 21:29 Uhr in
Hallo zusammen
Bin neu hier in diesem Forum und hoffe, dass ich hier mit meinem Problem hilfe finde :)
Im Moment entwickle ich einen Stundenplan für Drupal. Die Ansicht in den Stundenplan ist für alle Usergruppen, auch für Gäste, zugelassen. Auf der Stundenplan Ansicht sieht man gewisse Checkboxen, welche aktiviert werden können, um eine Unterrichtslektionen zu buchen. Wenn diese Lektionen gebucht wurden, verschwindet die Checkbox und das Feld wird Orange dargestellt. Beim "Buchen" werden gewisse Buchungsinformationen vom User in die MySQL Datenbank gespeichert -> SQL UPDATE Befehl. Um aber eine Buchung durchzuführen muss man sich an das System anmelden.
Bis hier hin funktioniert alles wunderbar. Jedoch sieht der Gast nicht das was ein Authorisierter Benuter sieht :O Beim Gast wird nicht erkannt, dass irgendein Update von der Datenbank erfolgt ist. Somit sieht der Gast eine alte Ansicht des Stundenplans. Auch Refresh des Browsers gibt keine Besserung...
Der Gast könnte das Problem "theoretisch" ganz einfach umgehen, indem er einen falschen Benutzername in das Anmeldefester tippt und versucht an das System anzumelden. Nun wird eine Fehlermeldung erzeugt und ein Wunder ... die Stundenplan Ansicht ist plötzlich auf dem neusten stand :O Eine weitere Möglichkeit, um das Problem zu umgehen ist, sich als Administrator anzumelden und die Seite update.php auszuführen. Danach hat der Gast auch sofort die aktuelle Stundenplan Ansicht.
Ist aber leider nicht der Sinn von diesem Stundenplan, das der Gast einen Fehler provozieren muss, damit er eine Aktuallisierung der Datenbank zur Follge hat.
Was mich aber wundert ist, dass jeder der sich anmeldet, die aktuelle Stundenplan Ansicht sieht ... aber wenn man sich wieder abmeldet, eine alte Version der Ansicht angezeigt wird. Anscheinend hat das Problem etwas mit der Session zu tun?
Die Stundenplan Ansicht ist wie folgt realisiert: Der Inhalt der Datenbank wir Zeile für Zeile in ein Array gespeichert. Mit den Informationen in den Arrays kann ich ganz elegant Abfragen ob der Termin gesetzt ist oder nicht, oder ob es schon gebucht wurde oder nicht. Daraufhin wird die Tabelle je nach Abfrage mit Checkbox, Orange Felder oder Graue Felder erstellt.
Ich hoffe, dass mir hier irgendjemand helfen kann und bin um jede Antwort dankbar.
Grüsse Uranus
Was kann ich machen, damit der Gast die aktuelle Stundenplan Ansicht sieht? Kann man ein Update an Drupal senden?
- Anmelden oder Registrieren um Kommentare zu schreiben
Update, Cache & Cron?
am 06.05.2009 - 19:31 Uhr
Hallo Uranus,
hast du Folgendes schon probiert?
1. update.php ausführen
2. Cache leeren
3. Cron ausführen
Regelmäßige Aktualisierungen führt Drupal erst beim Ausführen von Cron durch. Wenn du das nicht per Cronjob auf dem Server einrichten willst oder kannst, geht das am einfachsten mit dem Modul Poormanscron (http://drupalmodules.com/module/poormanscron).
Gruß
Frank
PS:
Ich würd' mich als Anfänger nicht gleich an die Entwicklung eigener Module wagen. Oft erfindet man dabei das Rad neu (und nicht unbedingt besser). Für Drupal gibt es unzählige Module, so dass man in der Regel nur selten selber Hand anlegen muss. Effizienter ist es, im passenden Forum zu schildern, was man erreichen will, und dann um Rat und Tipps zu fragen.
Bitte Erledigtes im Betreff des ersten Postings als [gelöst] markieren.
Update, Cache & Cron?
am 06.05.2009 - 22:08 Uhr
Hallo Frank
Vielen dank für deine Antwort. Ich versuche es mal mit der dritten Variante :) das ganze mit einem Cronjob Upzudaten. Das Modul schaue ich mir natürlich auch an, könnte noch sehr nützlich sein.
Beim update.php sehe ich das Problem, dass nur der Administrator der Seite Zugriff auf diese Datei besitzt. Das ist auch gut so. Der Gast oder die anderen authorisierte Benutzer sollten dies nicht ausführen dürfen. Beim Cache ist die selbe Problematik.
Ich frage mich, welchen Event Drupal auslöst, wenn z.B. ein Falsche Benutzer angegeben wurde? Denn dieser Event löst anscheinden so ein Update Befehl aus. Denn erst ab dann wird die dynamische Stundenplan Ansicht für den Gast aktuallisiert. Alle anderen Benutzer, welche sich am System anmelden, sehen immer eine aktuelle Ansicht. Darum verstehe ich auf eine Art nicht, warum der Gast nicht die selbe Ansicht sieht.
Aber wenn man das update.php automatisieren kann mit einem Cronjob dann werde ich das mal versuchen :) Vielen Dank für den Tipp.
Ich habe beim ersten Post meine Situation vergessen zu schildern :) ich muss für meine Diplomarbeit ein Drupal Modul erstellen und bin eigentlich schon fast Fertig, ausser, dass mit diesem Problem mit dem Gast. War Stundenlang auf der Suche nach einem möglichst flexiblen Stundenplan Modul für Drupal. Ich habe Calendar versucht, oder sonstige Event Tools, welche sich aber alle als ungeeignet herausstellte. Danach fand ich aber nach langem Suchen ein Modul, total simpel http://www.sam-hughes.co.uk/2008/12/12/drupal-modules/ ... total basic aber dank dieser Vorlage konnte ich das vorhaben nun realisieren http://www.e-tuition.ch/drupal/timetable <-- Modifizierter Stundenplan. Dieser kann nun einiges mehr ... hat auch viele Stunden gebraucht bis das so war wie wir uns das vorgestellt haben. Auf jedenfalls bräuchte ich schon noch viel übung, da das ganze für mich wirklich noch sehr neu ist, aber könnte mir vorstellen weiter auf dem Gebiet mit Drupal zu arbeiten.
Grüsse Uranus
Cool!
am 07.05.2009 - 07:47 Uhr
Wow, das sieht ja ziemlich gut aus. Wirst du das Modul auch veröffentlichen? Da gäb's sicher einige Interessenten.
Hast du wahrscheinlich längst, aber falls nicht, unbedingt das Buch Pro Drupal Development, Second Edition (http://www.drupalcenter.de/handbuch/17868) benutzen, um zu verstehen, wie Drupal funktioniert (gibt's inzwischen auch auf Deutsch: http://www.drupalcenter.de/handbuch/17962).
Gruß
Frank
PS:
Der update.php-Tipp gilt nur, wenn du das Modul verändert hast. Im normalen Betrieb regelt cron das alles.
Bitte Erledigtes im Betreff des ersten Postings als [gelöst] markieren.