Beiträge von Sonnenspeer

    Das ist das einzige Plugin, dass leider abgelehnt wurde wegen einigen Kleinigkeiten die nicht ganz den WL-Standard erfüllen. Bin aber leider noch nicht zu einem Update gekommen.


    Versuche es mal am Wochenende und lade dann die neue Version hier hoch. Daweil kann ich dir das Plugin mit der aktuellsten Version per Konversation zuschicken.

    Kommt ganz darauf an, was du da gemacht hast und deine Code-Struktur aussieht.


    Wenn du das PHP in Seiten/Boxen Plugin verwendet hast, dann musst du mehr machen, als nur die if-Abfrage.


    Beispiel:

    PHP
    1. $isInGroup = false;
    2. if(in_array(4, WCF::getUser->getGroupIDs()) || in_array(5, WCF::getUser->getGroupIDs()) || in_array(6, WCF::getUser->getGroupIDs()))
    3. {
    4. $isInGroup = true;
    5. }
    6. WCF::getTpl()->assignVariables('isInGroup', $isInGroup);


    Smarty
    1. {if $isInGroup}
    2. {* bla bla *}
    3. {/if}


    Natürlich nur wenn du dies auch im Template abfragen musst.


    Ansonsten müsste dein Code ausreichen. Aber dazu gibt es zu wenig Informationen.

    Nicht wirklich.


    Das funktioniert zweitilig. Wenn du eine Klasse hast, die von DatabaseObject ableitet, wird im Konstruktur die Tabelle ausgelesen die in der Klassenvariable $databaseTableName angegeben wurde. Der Parameter im Konstruktur entspricht dem Primärschlüssel für diese Tabelle. Somit wird im Konstruktor dann die genaue Zeile in der Tabelle für ein einziges Objekt ausgelesen und in ein assoziatives Array gespeichert.


    Die __get() Methode von PHP bietet die Möglichkeit auf eine Klassenvariable zuzugreifen, die nicht in der Klasse selbst definiert wurde. Im WCF wird dies dafür verwendet um auf die Spalten zuzugreifen. Dies wird über den Namen der angegebenen, nicht vorhandene Klassenvariable gemacht, indem im assoziativen Array danach gesucht wird.


    Beispiel:

    Tabelle person; Attribute: name, age


    Diese Attribute sind nicht in der Klasse Person.class.php selbst definiert. Nun bei $person = new Person(1); wird die Tabelle person ausgelesen, weil dies dort als $databaseTableName definiert wurde. Hierbei werden aber nur die Spalten für die Zeile mit dem Primärschlüssel 1 in einem Array abgespeichert.


    Beim Zugriff von $person->name wird anhand des Zugriffs über name ein Wert im zuvor gespeicherten Array über die magische Methode __get() gesucht. Dabei sollte die Rechtschreibung übereinstimmen soweit ich weiss. Also $person->Name funktioniert glaube ich nicht, wenn die Spalte nicht Name heißt.

    Für Endanwender ist es nicht immer leicht die Übersicht zu finden, welches Plugin mit welcher Pluginversion für die aktuell verwendete Systemversion benötigt wird.


    Am einfachsten ist es, das Plugin über die Pluginsuche im Admin-Panel zu suchen. Dann hast du immer Gewissheit, ob das gesuchte Plugin für die aktuell Systemversion zur Verfügung steht, denn es wird immer nur ein Ergebnis ausgespuckt, dass zu deiner Systemversion passt.

    Das ist nicht möglich, wenn weitere Plugins daran hängen, die auch geupdatet werden müssen.


    So kann das Forum 4.1 nicht mit dem Framework 3.0 arbeiten, sondern dann muss das Forum auch updaten auf Version 5.0 und das würde ein Upgrade der Lizenz bedeuten. Zudem könnten weitere Plugins auch das Update verhindern, wenn es keine kompatible Version für die neue Framework Version gibt.

    Hi. Ich antworte dir mal als Plugin-Entwickler mit meinem begrenzten Wissen.


    Zu 1)

    Die Klassen im Order "data" sind für die Verwaltung der Daten zuständig, wie du schon beschrieben hast.

    Der Klassenname könnte theoretisch beliebig sein, aber es ist eher eine Konvention diese so zu benennen, damit jeder Bescheid weiss, worum es sich handelt. Man muss sowieso explizit angeben, welche Klasse bei der Verarbeitung verwendet werden soll. So wird zum Beispiel in der PersonEditor Klasse die Person Klasse als Basisklasse angegeben und daher weiss dieses mit was genau gearbeitet wird.


    Zu 2)

    Die Spalten in der Tabelle können bei einer Klasse die von einem DatabaseObject (ich glaube so heißt diese) ableitet, wie z.B Person, über die magische Methode __get() abgerufen werden. Das Objekt mappt immer auf einem bestimmte Tabelle und einer bestimmten Zeile und daher ist es möglich auf die Spalten zuzugreifen.


    So ist z.B new Person(1) ein Objekt, dass auf eine Tabelle verweist, die in der Person.class.php angegeben wurde. Hierbei wird versucht auf die Zeile mit dem Primärschlüssel 1 zuzugreifen.


    Siehe in wcf\data\DatabaseObject.class.php bei der Methode __get()


    Zu 4)

    Das Template hat keine Ahnung von welcher Klasse es aufgerufen wird. Dem Template ist nur wichtig, dass die vorhandenen Template-Variablen registriert wurden.


    Es ist eher anders herum, dass die Klasse PersonList.class.php weiss, dass das Template personList.tpl verwendet wird und daher die nötigen Template-Variablen registriert und mit Werte befüllt.


    Zu 5)

    Auch hier gibt es theoretisch keine feste Vorgabe. Doch dies ist eher eine Konvention und Empfehlung für eine einheitliche Umgebung. Somit weiss man auch bereits bei einem Fehler, worum es sich handelt, wenn man den Klassennamen sieht.


    Zudem ist es eine globale Konvention den Klassennamen und Code in englischer Sprache zu benennen.


    // edit: Die einzige Pflicht hierbei ist die Endung von Form oder Page z.B PersonAddForm oder PersonListPage.

    Das System versucht beim auflösen einer Seite die entsprechende Seite in der Ordnerstruktur zu finden. Da die Form und Page Klassen nicht im gleichen Ordner gespeichert werden, wird hier darauf hingewiesen, wo die Seite sich befindet.