Hey Leute,
ich muss als Semesterprojekt einen Terminkalender basteln, in dem ich Termine eintragen kann etc...
Er ist so gut wie fertig alles fukntioniert. Er zeigt mir das heutige Datum + Uhrzeit an, ich kann neue Termine eintragen
und dementsprechend verwalten.
Nur die "Erinnerungsfunktion" funktioniert noch nicht. Ich möchte theoretisch, dass mein nächster Termin so angezeigt wird, ein Beispiel:
Nächster Termin: "2010-12-24 - Weihnachten"
Das in Klammern soll der nächste Termin aus meiner Datenbank sein, der ansteht. Und wenn das Datum vorbei ist, muss er natürlich den
nächsten Termin anzeigen...
Nur hab ich da jetzt keine Ahnung...
Wäre um Hilfe sehr hilfreich!
Grüße,
Deeet88
Bestimmtes Element der Datenbank anzeigen
was ist jetzt genau deine Frage?
Dein Problem lässt sich doch relativ einfach lösen indem du die richtige SQL-Abfrage nimmst. In etwa so:
Dein Problem lässt sich doch relativ einfach lösen indem du die richtige SQL-Abfrage nimmst. In etwa so:
Code: Alles auswählen
SELECT datum, event FROM kalender WHERE datum >= NOW() ORDER BY datum ASC LIMIT 1
Oder in SQLAlchemy mit ORM und entsprechend definiertem `Event`:
Code: Alles auswählen
upcoming_event = session.query(Event).filter(Event.date >= now()).first()
Ich muss hinzufügen, dass ich in Sachen Python und Web2Py absoluter Neuling bin.... 
Ich hab hier meine Master.html, in der eben der kommende Termin angezeigt werden soll. Und zwar nach "<p><u><b>Nächster Termin:</b></u>" soll eben der Termin erscheinen.
So sieht meine Termin Datenbank in "Modelle" aus:
Und das is meine Funktion, im "Controller", um alle Termine anzuzeigen:
Hoffe, dass ihr jetzt bisschen mehr durchblickt! 

Ich hab hier meine Master.html, in der eben der kommende Termin angezeigt werden soll. Und zwar nach "<p><u><b>Nächster Termin:</b></u>" soll eben der Termin erscheinen.
Code: Alles auswählen
<!DOCTYPE html>
<html lang="{{=T.accepted_language or 'en'}}" class="no-js">
<head>
<!--Externe Dateien-->
<link rel="stylesheet" type="text/css" href="{{=URL('static','main.css')}}">
<title>{{=response.title or request.application}}</title>
<script src="{{=URL('static','js/modernizr-1.6.min.js')}}"></script>
{{response.files.append(URL('static','css/test.css'))}}
{{include 'web2py_ajax.html'}}
<!--Favicon für Ipad, Iphone etc-->
<link rel="shortcut icon" href="{{=URL('static','images/favicon.ico')}}" type="image/x-icon">
<link rel="apple-touch-icon" href="{{=URL('static','images/favicon.png')}}">
</head>
<body>
<div class="flash">{{=response.flash or ''}}</div> <!-- Notification -->
<div id="container">
<div id = "header"><!--Header mit Logo, Navi und Logindaten-->
<div id = "logo"><img src="/Kalender/static/images/logo.gif" />
<!--<img src="{{URL(r=request,c='static',f='images',args='logo.gif')}}" />--></div>
{{block header}} <!-- Default Header -->
{{try:}}{{=auth.navbar(prefix=T('Hallo'),action=URL('default','user'))}}{{except:pass}}
<br />
<ul id="navigation">
<li class = "active"> <a href="http://127.0.0.1:8000/Kalender/default/index" class="button" >Neuer Termin</a></li>
<li> <a href="http://127.0.0.1:8000/Kalender/default/list" class="button" >Alle Termine</a></li>
<li> <a href="http://127.0.0.1:8000/Kalender/default/search" class="button" >Termin suchen</a></li>
</ul>
<div style="clear: both;"></div>
{{end}}
</div><!--Header Ende-->
<!--Datum mit Termin-->
<div id = "date">
<div id = "datum"><!--Gibt aktuellen Tag und Datum aus-->
<script type="text/javascript">
var datum = new Date();
var a = datum.getHours();
var b = datum.getMinutes();
var wTag = datum.getDay();
var Tag = datum.getDate();
var yMonat = datum.getMonth();
var Jahr = datum.getFullYear();
var Wochentag = new Array("Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag");
var Monat = new Array("Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember");
document.write("<b><u><i>Heute ist:</i></u></b> " + Wochentag[wTag] + ", der " + Tag + "." + Monat[yMonat] + " " + Jahr + ", " + a + ":" + b + "h");
</script>
</div><!--Datum Ende-->
<div id="aktuellerTermin"><!--Zeigt aktuellsten Termin an-->
<p><u><b>Nächster Termin:</b></u></p>
</div><!--Termin Ende-->
</div><!--Datum mit Termin Ende-->
<div id="content">
{{include}}
</div>
</div>
</body>
</html>
Code: Alles auswählen
db.define_table( 'termin',
Field('titel', requires = IS_NOT_EMPTY(IS_NOT_IN_DB(db, 'termin.titel'))),
Field('datum', 'date', requires = IS_NULL_OR(IS_DATE())),
Field('zeit', requires = IS_NULL_OR(IS_LENGTH())),
Field('erstellt', 'datetime', default=request.now),
Field('autor', requires = db.auth_user, default=user_id),
Field('beschreibung', 'text')
)
Code: Alles auswählen
def show():
## Zeigt einen eingetragenen Termin und seine Details
thistermin = db.termin[request.args(0)]
if not thistermin:
redirect (URL (r = request, f= 'index'))
db.kommentieren.termin_id.default = thistermin.id
if user_id:
form = crud.create(db.kommentieren)
else:
form = None
terminkommentare = db(db.kommentieren.termin_id == thistermin.id).select()
return dict (termin = thistermin, kommentare = terminkommentare, form = form)

Zuletzt geändert von Anonymous am Donnerstag 30. Dezember 2010, 12:56, insgesamt 1-mal geändert.
Grund: Quelltexte in Code-Tags gesetzt.
Grund: Quelltexte in Code-Tags gesetzt.
@Deeet88: Dass Du Web2Py verwendest, hättest Du auf jeden Fall erwähnen müssen. Es gibt ja noch ein paar andere Rahmenwerke.
Wo genau liegt denn das Problem? Du musst eine Datenbankabfrage machen. Dazu musst Du Dir überlegen was genau Du von der Datenbank wissen willst, und dann schauen wie man das in der Abstraktionsschicht von Web2Py ausdrückt. Ich habe die Dokumentation dazu mal kurz überflogen und wenn ich mir die Beispiele dort anschaue, scheint das bis auf eine Sache ziemlich geradlinig umsetzbar zu sein. Ich habe auf die schnelle nicht gesehen, wie ein Datum für Vergleiche in der Abstraktionsschicht dargestellt wird. Die Beispiele sind immer mit ganzen Zahlen gewesen. Aber das sollte sich doch heraus finden lassen.
Was hast Du denn schon an Code für diese Abfrage geschrieben?
Was anderes: Im HTML die aktuelle Zeit vom Client anzuzeigen und dann den nächsten Termin basierend auf der Zeit des Servers, wird verwirrend wenn beide nicht in der gleichen Zeitzone operieren. Du solltest für die Terminverwaltung keine lokalen Zeiten verwenden, sondern UTC und die für die Anzeige dann in die lokale Zeit des Client umrechnen.
Wo genau liegt denn das Problem? Du musst eine Datenbankabfrage machen. Dazu musst Du Dir überlegen was genau Du von der Datenbank wissen willst, und dann schauen wie man das in der Abstraktionsschicht von Web2Py ausdrückt. Ich habe die Dokumentation dazu mal kurz überflogen und wenn ich mir die Beispiele dort anschaue, scheint das bis auf eine Sache ziemlich geradlinig umsetzbar zu sein. Ich habe auf die schnelle nicht gesehen, wie ein Datum für Vergleiche in der Abstraktionsschicht dargestellt wird. Die Beispiele sind immer mit ganzen Zahlen gewesen. Aber das sollte sich doch heraus finden lassen.
Was hast Du denn schon an Code für diese Abfrage geschrieben?
Was anderes: Im HTML die aktuelle Zeit vom Client anzuzeigen und dann den nächsten Termin basierend auf der Zeit des Servers, wird verwirrend wenn beide nicht in der gleichen Zeitzone operieren. Du solltest für die Terminverwaltung keine lokalen Zeiten verwenden, sondern UTC und die für die Anzeige dann in die lokale Zeit des Client umrechnen.