Kommentar Funktion

Hier dreht sich alles um die auf der Webseite veröffentlichten Tutorials. // This forum is all about the APF tutorials.
Antworten
phpdummi
Beiträge: 18
Registriert: 23.11.2007, 16:15:15

Kommentar Funktion

Beitrag von phpdummi » 26.05.2009, 15:27:18

Hi,

ich bin gerade dabei das Tutorial durchzuarbeiten und hänge - wie so oft - fest:
Unter Abschnitt 4.4 "Business Schicht" (unter de.apf.org falls das relevant ist) wird in die Verwendung des Pagers eingeführt.
Ich finde jedoch weder dort noch in der Doku zum Pager selbst eine Angabe dazu, wie die INI Variable Pager.DatabaseConnection aussehen soll.
Desweiteren ist mir nicht ganz klar, an welcher stelle im Framework der Kontext für die aktuelle Applikation gesetzt wird, bzw. woher der Pager weiß an welcher stelle er die INI-Datei suchen soll.
Mir ist auch nicht ganz klar warum der Kontext hier überhaupt relevant ist, da das Modul ja von mehreren Seiten geladen werden kann/sollte?!
(Also mehreren "Seiten" unter apps/sites)

Benutzeravatar
dr.e.
Administrator
Beiträge: 4555
Registriert: 04.11.2007, 16:13:53

Re: Kommentar Funktion

Beitrag von dr.e. » 26.05.2009, 22:30:03

Hallo Alex,
Unter Abschnitt 4.4 "Business Schicht" (unter de.apf.org falls das relevant ist) wird in die Verwendung des Pagers eingeführt.
Ich finde jedoch weder dort noch in der Doku zum Pager selbst eine Angabe dazu, wie die INI Variable Pager.DatabaseConnection aussehen soll.
In der Version 1.6 wurde das Framework um eine Abstraktionsschicht für den Datenbankzugriff erweitert - der connectionManager. Dieser ermöglicht den Zugriff auf verschiedene Datenbanken über die selbe API. Um eine Verbindung zu einer Datenbank über diesen herstellen zu können wird eine Konfigurationssektion in der Konfigurationsdatei

Code: Alles auswählen

{ENVIRONMENT}_connections.ini
unter

Code: Alles auswählen

/config/core/database/{CONTEXT}
erwartet. Dort wird jeweils eine Sektion für eine Verbindung definiert. Diese hat folgende Gestalt:
[Sektionsname]
DB.Host = ""
DB.User = ""
DB.Pass = ""
DB.Name = ""
DB.Type = ""
DB.DebugMode = ""
Um bei der Konfiguration von auf dem connectionManager aufsetzenden Komponenten die Flexibilität zu besitzen, die zu verwendende Datenbankverbindung vorzugeben / zu konfigurieren, wurde in den relevanten Modulen eine Erweiterung der Modul-Konfiguration um die zu benutzende Datenbankverbindung eingeführt. Im Fall des Pagers ist das die Direktive Pager.DatabaseConnection. Diese referenziert eine Sektion in der {ENVIRONMENT}_connections.ini. Konfigurierst du beispielweise eine Verbindung mit dem Namen Comments, so muss der Inhalt der genannten Direktive auch Comments lauten.
Desweiteren ist mir nicht ganz klar, an welcher stelle im Framework der Kontext für die aktuelle Applikation gesetzt wird, bzw. woher der Pager weiß an welcher stelle er die INI-Datei suchen soll.
Der Context wird in der Bootstrap-Datei (index.php) gesetzt. Hier steht üblicherweise

Code: Alles auswählen

$Page = new Page();
$Page->set('Context','sites::myapp');
$Page->loadDesign('sites::mysite::pres::templates','mywebsite');
echo $Page->transform();
Da der Context für alle Objekte, die mit APF-Mitteln erstellt wurden gilt, kann jedes Objekt auch darauf mittels $this->__Context zugreifen. Diesen Umstand macht sich u.a. die Methode __getConfiguration() zu Nutzen um Context-abhängige Konfigurationen laden zu können (siehe http://adventure-php-framework.org/Seit ... Controller).
Mir ist auch nicht ganz klar warum der Kontext hier überhaupt relevant ist, da das Modul ja von mehreren Seiten geladen werden kann/sollte?! (Also mehreren "Seiten" unter apps/sites)
Das ist korrekt, ein Modul kann mehrmals geladen werden. Context und Environment sind zur Unterscheidung des Einsatzgebietes in unterschiedlichen Projekten zuständig. Lieferst du mehrere Projekte unter sites aus, bekommt jede Applikation/Webseite einen eigenen Context. Setzt du ein Modul mit dem selben Context in der selben Applikation ein, hast du noch die Möglichkeit den Context innerhalb der Applikation durch den <core:importdesign />-Tag manuell zu setzen. Habe grade gesehen, dass die Dokumentation hier unvollständig ist - trage das sofort nach. Im Quelltext der Klasse core_taglib_importdesign kannst du das jedoch erkennen.

Viele Grüße,
Christian
Viele Grüße,
Christian

trx
Beiträge: 23
Registriert: 12.08.2009, 13:16:46

Re: Kommentar Funktion

Beitrag von trx » 12.08.2009, 14:49:20

Hallo erstmal an alle hier im Forum und danke an Christian für das schnelle Feedback betreff der Registrierung.

Bin ein relativer Neuling was objektorientiertes Programmieren angeht und habe mich in der Hoffnung auf Nachhaltigkeit eines Projektes für die Benutzung von APF als Programmierbasis entschieden.

Um mich darin einzuarbeiten habe auch ich mit dem Kommentar-Tutorial angefangen, muss aber eingestehen, dass ich durch die Einrichtung der Konfigurationsdateien noch nicht so wirklich durchgeblickt habe.

Mein Stand: - Alle nötigen Teile der Daten-, Business- und Präsentationsschicht geschrieben
- Kommentarfunktion in Spielwiese-Template eingebaut
--> Problem: Fehlermeldung
konkret: "[connectionManager::getConnection()] The connection type may not be equal to "MySQL". Please check the connection configuration at the "MySQL" section! "

Die Struktur der Konfig.-dateien ist wie folgt:

Code: Alles auswählen

/apps 
     /config 
             /core 
                  /database
                              /sites 
                                     /apfexample / DEFAULT_connections.ini  
                                                 /Statements 
                                                                                      
            /modules 
                  /comments
                              /sites 
                                    /apfexample/ DEFAULT_comments.ini
                 /pager
                             /sites
                                  /apfexample/ DEFAULT_pager.ini 
Die Dateien haben folgenden Inhalt:
comments.ini:
[Default]
Database.ConnectionKey = "Comments"

pager.ini: Wie im Tutrial beschrieben. Variabler Parameter: Pager.DatabaseConnection = "Comments"

connections.ini:
[Comments]
DB.Host = "localhost"
DB.User = "root"
DB.Pass = ""
DB.Name = "testwebsite"
DB.Type = "MySQL"
DB.DebugMode = "false"

Hoffe, ihr könnt mir helfen.

Gruß
Sebastian

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: Kommentar Funktion

Beitrag von Screeze » 12.08.2009, 14:57:23

DB.Type darf nicht MySQL lauten.
für deinen Fall müsste es MySQLx sein. Die genaue erklärung macht dann lieber später der doc

trx
Beiträge: 23
Registriert: 12.08.2009, 13:16:46

Re: Kommentar Funktion

Beitrag von trx » 12.08.2009, 15:20:18

Danke trotzdem schon mal für die schnelle Antwort.
Hab mir grad auch noch mal die connectionManager.php angesehen und bin auch drauf gekommen. Wusste nur nicht, was ich anstelle von MySQL schreiben sollte. Fehlt jetzt nur noch die Begründung :D

Benutzeravatar
dr.e.
Administrator
Beiträge: 4555
Registriert: 04.11.2007, 16:13:53

Re: Kommentar Funktion

Beitrag von dr.e. » 12.08.2009, 16:02:45

Hallo ihr beiden,

der Grund ist simpel: der ConnectionManager kann nur Treiber zurückliefern, für die er auch eine Implementierung hat. Aktuell gibt es dazu die unter http://adventure-php-framework.org/Seit ... rschichten aufgeführten Implementierungen. Die für MySQL-Datenbanken heißt schlicht "MySQLx" ("x" für 4/5/6). Der MySQLHandler ist eine veraltete Komponente und kann nicht mit dem ConnectionManager verwendet werden.

Mehr steckt da nicht dahinter. :)

Viele Grüße,
Christian
Viele Grüße,
Christian

trx
Beiträge: 23
Registriert: 12.08.2009, 13:16:46

Re: Kommentar Funktion

Beitrag von trx » 14.08.2009, 12:03:03

Danke für die Erklärung.
Bei genauerer Suche in der Dokumentation hätt ich eigentlich selbst drauf kommen können -_-.
Klappt auch alles soweit, bis auf ein Problem mit dem Pager. Dieser zeigt mir bei mehr als 5 Kommentaren nämlich keine weiteren PagerPages an.

Hab mir die Methoden __createPagerPagers4Display() und getPager() im PagerManager angesehen um festzustellen ob ich den Konfigurationsparametern irgendetwas vergessen oder falsch gemacht habe.
ich hoffe, dass ihr mir mit den wenigen Informationen trotzdem noch mal helfen könnt.

Gruß
Sebastian

Benutzeravatar
dr.e.
Administrator
Beiträge: 4555
Registriert: 04.11.2007, 16:13:53

Re: Kommentar Funktion

Beitrag von dr.e. » 14.08.2009, 12:25:54

Hallo Sebastian,

kannst du deine Konfigurations-Sektion und deine Pager-Statements bitte posten. Ich vermute beim EntriesCount-Statement passt etwas nicht.

Viele Grüße,
Christian
Viele Grüße,
Christian

trx
Beiträge: 23
Registriert: 12.08.2009, 13:16:46

Re: Kommentar Funktion

Beitrag von trx » 14.08.2009, 13:44:57

That's it!
Das load_entries_count-Statement war falsch.
Es lautete:

SELECT COUNT(*) AS EntriesCount
FROM article_comments
WHERE CategoryKey = '[CategoryKey]'
GROUP BY ArticleCommentID;

Für eine vernünftige Zahl muss es natürlich "COUNT BY CategoryKey" heißen. Der Fehler ist übrigens auch im Tutorial!

Gruß
Sebastian

Benutzeravatar
dr.e.
Administrator
Beiträge: 4555
Registriert: 04.11.2007, 16:13:53

Re: Kommentar Funktion

Beitrag von dr.e. » 14.08.2009, 23:19:19

Hallo Sebastian,

schön dass es nun klappt. Vielen Dank für den Hinweis, ich habe den Fehler im Tutorial und in den Beispiel-Konfigurations-Dateien gleich ausgebessert.

Viele Grüße,
Christian
Viele Grüße,
Christian

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast