viele wollen ja mit Yii ein kleines CMS bauen, dass wirklich nur die rudimentärsten Funktionen Neu, Bearbeiten, Löschen hat. Das ist auch mein Ziel, also habe ich das Programmierbeispiel mit dem Blog mal durchgearbeitet, und soweit auch verstanden.
Das ganze möchte ich nun um einen kleinen Terminkalender erweitern. Es sollen nur vom Anwender Termine angegeben werden können. Datum, Titel, Beschreibung, Ort. Diese 4 Informationen werden dann nach Datum sortiert in einem Portlet angezeigt.
Mein erster Ansatz dazu war folgender:
Erstellen der SQL-Tabelle "Dates" (id int, date date, title varchar, content text, location varchar)
aufrufen des yiic.php shell index.php
model dates
crud dates
Nachdem ich dann herausgefunden hatte, dass Yii meine Links verändert, und ein localhost/index.php?r=dates eben NICHT mehr funktioniert, konnte ich dann auch mein funktionierendes generiertes von Yii anschauen.
Jetzt mein Problem: Wie mache ich weiter? Wie erstelle ich ein neues Portlet, dass mir die 3 neusten "Termine" aufruft und anzeigt?
Ich verstehe glaub ich nicht ganz, was du mit der init() bezweckst…
Bzgl. Dokumentation: render() und renderPartial() sind ausführlich in der API-Dokumentation beschrieben. Sie ist die Referenzdoku für alle Detailfragen und sehr sehr ausführlich.
Bei render() wird ein layout-View (zu finden unter views/layout/main.php) um den aktuell gerenderten View herumgelegt. Bei renderPartial() passiert das nicht, und es wird nur der "nackte" gerenderte View ausgegeben.
Heisst nicht auch deine ActiveRecord-Klasse "Dates"? Dann gibt es natürlich einen Namenskonflikt und Yii versucht vermutlich, dein Widget als ActiveRecord zu initialisieren und wundert sich, wieso es dort keine init()-Methode gibt. Yii unterstützt noch keine Namespaces, so dass doppelte Klassennamen nicht erlaubt sind.
Richtig! Das ist es, meine Namen haben sich überschnitten. Meine Dummheit.
Jetzt meckert Yii aber wieder:
sagt mir:
KalenderPortlet does not have a method named "renderPartial".
Wenn ich das richtig verstehe, erbt KalenderPortlet von XPortlet, und "renderPartial" muss in XPortlet vorhanden sein, ist es aber nicht?? Oder wie interpretiere ich diese Fehlermeldung?
Sorry, kleiner Fehler: Bei einem Widget (und XPortlet extendet ja CWidget) gibt es nur render(), da ein Widget niemals in ein Layout eingebettet sein kann, sondern Bestandteil anderer Views ist.
Alles klar ! Jetzt hab ich endlich verstanden. Es funktioniert!! Danke für die Unterstützung. Hättest du gewusst, dass ich Yii-Neuling bin, hättest du sicherlich von anfang an geschrieben, dass ich hier den ActiveRecord nutzen muß.
So, damit spiel ich jetzt erstmal herum, vielleicht kommen ja noch fragen.
Hast du eine idee, warum mir index.php?r=dates/admin nicht das admin-interface von dates liefert, sondern einfach ewig "localhost contacted, waiting for reply" im Browser erscheint?
Nicht wirklich. Aber kannst du ja leicht prüfen: dates/admin wird ja auf den controller in protected/controller/DatesController und darin die Methode ActionAdmin aufgelöst. Im Zweifel hilft immer mal wieder ein
das man kurz mal wo einfügt, um zu prüfen, was Sache ist. Damit findest du sicher mehr raus. Viel Spaß beim Basteln .