Andreas Korthaus: Angeber...

Beitrag lesen

Hallo Christian!

vi fo_post.conf... ;)

Bekomme ich wenn ich den PRO-Account buche auch einen Shell-Zugang? ;-)

Das sind die Vorrechte des Administrators *fg*

sei Dir zugestanden ;-) Ich dacht Du hättest einen extra Parameter ?sonderrechte=ck einmgebaut ;-)

Nein, ich meine, was ist, wenn irgendwann mal die Struktur
aenderst? Oder wenn du den Array-namen aenderst? Oder
sonstwas? Wuerdest du das abstrahieren, sprich, Methoden
definieren, die aufgerufen werden, koenntest du deren
Rueckgabe evntl. transformieren. So muesstest du jedes Plugin
umschreiben.

stimmt. Das ist der Vorteil der OOP. Aber ich habe leider (*schäm*) immer noch Schrierigkeiten mir das hier vorzustellen. Das ist auch das Problem, zumindest ich rede teilweise an Dir vorbei, da mir vermutlich eine gedankliche Abstarktionsebene oder sowas fehlt. Kommt vermutlich auch daher das ich noch sehr unerfahren in OOP bin.
Also mal bei 0 angefangen:
ich habe eine Klasse, meinetwegen "basis" die, hier erstelle ich eine Instanz am Anfang. In der Klasse sind die ganzen Grundlagen enthalten.  D.h. die KLasse basis hat eigenschaften wie "root_path", "root_url", Mothoden wie "get_menu", "get_header"... die ich dann feriges HTML zurückgeben, um das überall einbauen zu können. Für das Menü gibt es eine eigene Klasse "menu". Diese hat für jeden Menüpunkt eine Instanz. Die einzelnen Instanzen werden beim Starten der Klasse erstellt, die hierfür notwendigen Angaben werded aus der zentralen menu_conf.inc geparst.
Die einzelnen Plugins wüßte ich beim besten Willen nicht wie ich die als Klassen einbinden soll. Ich würde jetzt für ein Modul ein einfaches Script schreiben, welches "get_header", "get_menu"... einbindet, udn für sich sonst ein eigenes PHP-Script ist. Aus der basisklasse können darüberhinaus angaben wir root_path... entnommen werden, der Datenbank-Zugriff erfolgt über PEAR. Wobei, ich glaube hierfür schreibe ich auch eine eigenes Modul, welches von mir aus PEAR benutzt, aber wenn ich direkt auf PEAR zugreife werde ich zwar unabhängig von der DMS, aber ich bin immer noch an genaue Spaltenangaben... gebunden. Wenn ich das jetzt noch abstrahiere, also nur auf eine Methode in der DB-Klase zugreife, kann ich ja an Stadt "SELECT telefon..." einfach "client_data->telefon" oder sowas schreiben. Wenn sich jetzt die Tabelle verändert kann kann ich das in der Klasse direkt für alle Plugins gleichzeitig ändern. Mehr fällt mir jetzt zum Thema OOP hier nicht ein.

*seufz*

tut mit Leid!

$funcname       = $modul."_menu_hook";
$menu_entries[] = $funcname($arg1,$arg2);

OK. Also kann man das ruhig so machen.

Und einen Rückgabewert, ob Klasse oder nicht, ich kann
definitiv keien Funktion in das Modul schreiben,

Natuerlich kannst du.
$classname = $modul."Class";
$obj &= new $classname($arg1,$arg2);
$menu_entries[] = $obj->menu_hook();

OK. Also das Modul als Klasse, so würde es gehen. Und was sind da dann für Methoden udn Eigenschaften drin, außer dem Menü-Array? Auch die HTML-Ausgabe betreffend? Steht das _ganze_ Modul in der Klasse? Also auch die Funktionen, die ich mit dieser Klasse implementieren will?
Dann würde ich aber, so wie ich das jetzt verstehe, immer _alle_ Module laden, ob ich es jetzt brauche oder nicht, oder? Aber wenn das Modul in der Klasse steht, und ich diese Klasse mit include einbinde, gibt es dann überhaupt eine extra PHP-Datei auf der Menüeintrag verlinkt, oder mache ich die komplette Ausgabe in einem Sript? Also mit Parametern?
Ich bräuchte also auf alle Fälle

$modul_list = file("modul_list.conf");
foreach($modul_list AS $modul) {
    $classname = trim($modul)."Class";
    $obj &= new $classname($arg1,$arg2);
    $menu_entries[] = $obj->menu_hook();
}
und das immer wenn ein neues Script gestartet wird, korrekt?

Sollte man denn das Modul Kontaktformular so frei machen
könnten, das man die Navigation... selbst einbinden kann?
Ich binde eigentlich immer 4 Dateien ein:

  1. global.inc (PHP-Funktionen...)
  2. header.inc
  3. footer.inc
  4. menu.inc

Könnte man dei Struktur nicht auch noch aulagern, so dass
man wirklich  als Template nur noch mit dem wirklichen
body des Dokuments zu tun hat, und keine includes?

Hae?

Ich frage mich halt gerade, wie die Ausgabe geschiehen soll. Bisher hatte ich z.B. das Modul "Fragebogengenerator". dies besteht im Prinzip aus einem PHP-Script welches die oberen 4 Dateien einbindet, um eine den anderen Scripten entsprechnde Ausgabe/Design zu erzeugen.  Nach dem Header un vor dem Footer steht eine HTML-Tabelle in die ich schreiben kann was ich will. Da schreibe ich dann z.B. die Eingabefelder für den Generator hinein. Muß natürlich extra bestimmte Elemente mit bestimmten CSS-Klassen versehen. Das ganez hat jetz nichts mit Klassen zu tun, und ich wüßte auch nicht was eine Klasse hier hhelfen könte, außer vielleicht die Meta-Daten wie Menü-Eintrag für die Menüleisten-Klasse zugreifbar zu machen. Was sollte sonst noch in eine Klasse? Wenn ich das Formular mit den Änderungen abschicke, dann wird es an sich selbst geschickt, udn per IF wird geprüft, ob per POST die entsprechenden Parameter übermittelt werden und dem entsprechend Einträge in die DB gemacht. OK, diese Aktionen könnte ich auch in eine Klasse auslagern, müßte dann aber immer noch "manuelle" mit IF am Anfang prüfen was jetzt gemacht weden soll, ob einfach das leere Formular ausgegeben werden soll, oder ob die Methode der Klasse ausgeführt werden soll.

Es muss keine Funktion sein. Es kann eine Methode sein.

Das verlagert das Problem nur auf den Klassennamen. Aber ich hab es jetzt glaube ich verstanden.

das geht doch? Aber was bringts? Sobald ich mehr als 1
Funktion mit demselben Namen einfüge, per include, ist
Ende!

Was hat das eine mit dem anderen zu tun?

ich brauche je eine Funktion in dem Modul, udn damit die ausgefüßhrt wird muß ich die Datei mit include einbinden - was willst Du mehr?

Deshalb bin ich btw. bei sowas dafuer, Plugins als Klassen
zu implementieren. Dann hat man die Probleme der Namensgebung
nur bedingt.

Wie gesagt hat man dasselbe Problem, halt nur mit den Klassennamen. Das übergehe ich aber dann mit den variablen Namen wie oben.

Warum sollte ich etwas doppelt implementieren? Meide
Redundanzen!

Aber manchmal sind ist es erheblich einfach 2-3 Redundanzen in Kauf zu nehmen. Gerade auf meinem Kenntnisstand!

Ich prüfe ob das Modul vrohanden ist und greife dann
direkt auf die DB zu! Obwohl, was wenn sich die Tabele da
ändert... also brauche ich speziell hierfür eine eigene
Klasse die den Zugriff auf die Adressdaten regelt, oder
wie würdest Du das jetzt machen?

Du benutzt das Plugin 'Adressbuch', um an die Daten zu
kommen.

Das könnte ich mir durchaus vorstellen. Also mit einer Methode die direkt html zurückgibt, oder an welcher Stelle sollte man html erzeugen?

PEAR::DB ist maechtig, aber teilweise ziemlich idiotisch
umgesetzt. Deshalb habe ich mich dagegen entschieden.

Aber besser als sich auf mysql festzulegen, bei so gut wie 0 Mehraufwand!

Grüße
Andreas