Form Page

  • @Josh Das find ich grad, wenn ich das so sagen darf, etwas kompliziert.

    Also ich hab ja jetzt verstanden, dass das {foreach} wie eine Schleife ist. Somit macht er also bei jeder Spalte eine If abfrage, ob meine ID mit der aus der Spalte übereinstimmt.
    Wenn nicht, so zeigt er stattdessen den Fehler. Wenn sie übereinstimmt, zeigt er den Inhalt.

    Find ich jedenfalls gut das Thema, weil ich dann auch endlich mal ein bisschen dazu lerne. Und das will ich ja. Klar könnte ich jemanden fragen, aber was hab ich davon? Ein Plugin, aber kein Wissen wie man sowas macht.

  • Das ist aber nicht kompliziert, wenn man es einmal verstanden hat.

    Du missachtest hier das MVC-Prinzip. Du weißt ja im Template noch gar nicht ob du Daten hast, oder nicht, das wüsstest du, wenn du das MVC-Prinzip beachten würdest, schon. Dort würdest du halt direkt in der FormPage die entsprechenden Elemente (direkt in der Query) filtern.

    Stell dir mal vor, in Themen würde Woltlab auch sämtliche Beiträge abfragen und dann in der foreach-Schleife abfragen, ob der Beitrag zum Thema gehört. Klingt doch auch komisch, richtig? Daher filtert Woltlab auch in der SQL-Query die Beiträge und schneidet diese auf das eigentliche Thema zu.

    Schau dir wie gesagt mal mein Beispiel an, du kannst das (fast) exakt genauso machen.

  • PHP
    $this->objectList->getConditionBuilder()->add("user_jcoins_statement.userID = ? AND user_jcoins_statement.isTrashed = 0", array(WCF::getUser()->userID));

    Ok, wie soll ich das verstehen.

    Wie eine If Abfrage? Wenn Bla1 = ? AND Bla2 = 0, dann array(WCF::getUser()->userID)); ?

    Ist das user_jcoins_statement.userID eine Tabelle in der SQL DB? Oder was bedeutet das?

  • Nein, ich greife auf die aktuelle SQL-Abfrage zu, und füge dort einen Filter hinzu (SQL). user_jcoins_statement.userID ist die Tabelle mit der „Spalte“. Jede Tabelle hat ja ihren alias (meist einfach nur der Tabellenname ohne wcf1_), das stelle ich voraus und dort will ich die Spalte userID abfragen und nur die Rows raussuchen, welche die userID mit dem jetzt eingeloggtem User haben.


    Du solltest dringend bei den Grundlagen anfangen, so bringt das hier relativ wenig und du rätst dir nur Code zusammen, ohne ihn zu verstehen: Grundlagensammlung Programmierung

  • Ok, jetzt hab ich es ein bissl verstanden :thumbup:

    PHP
    $this->objectList->getConditionBuilder()->add("app.userID = ?", array(WCF::getUser()->userID));

    Ergebnis



    Edit: Jetzt brauche ich natürlich auch noch die Seiten, auf denen die Jeweiligen Bewerbungen komplett ausgegeben werden.

    Hier wieder hätte ich mir vorgestellt, dass man wieder sone Auflistung wie in der Overview Page hat, jedoch mit Link zum vollen Text. Am liebsten würde ich die vollen Texte nicht als eigene Seiten wie die Thread, sondern eher als PoPup ausgeben lassen. Wobei es eigentlich Spielerei ist ^^ :D

    Im Forum sind doch nur die Dateien ThreadPage klasse und die Thread tpl zuständig oder? Bzw. noch die Board Page, da dort da die Auflistung der Threads + Link ist.

  • So, ein letzes Mal, hoffe ich.

    Ich möchte das mit den Ausgaben gerne so lösen wie mit den Threads im Forum, also das man http://meineurl.tdl/application/ID stehen hat.

    Hierfür brauche ich lediglich eine application.tpl und ApplicationPage.class

    Ich hab mir hierbei mal das News System von voolia angesehen. Liege ich mit diesem Codeschnipsel...


    PHP
    /**
    * @see \wcf\page\IPage::readParameters()
    */
    public function readParameters() {
    parent::readParameters();
    if (isset($_REQUEST['id'])) $this->appID = intval($_REQUEST['id']);
    }
    }

    ... richtig? Damit, wenn ich es so richtig verstehe, wird die ID angefordert.

    Ähnliches steht ja auch in der ThreadPage.class if (isset($_REQUEST['id'])) $this->threadID = intval($_REQUEST['id']);

    Jetzt weiß ich allerdings nur nicht, wie hierzu das Template aussehen muss.

  • Bekomme es einfach nicht hin. In den Voolia News Plugin sieht es irgendwie so einfach auf, hin hingegen bringe immer nur nen server Error, Objekt nicht gefunden, undefiniert und weiße Seiten zusammen...

    Gibt es irgendwas einfacheres, an das ich mich richten kann? Irgendwelche Beispiele?

    Die Bewerbungen sollen ja nicht so alle auf einmal auf einer Seite zusammen geklatscht sein, sondern ihre "eigene Page" haben


    Bin da irgendwie langsam am verzweifeln :(

  • Haha, sorry... :D

    Aber ok, hab meinen (saudummen) Fehler gefunden... Kopieren und Einfügen ist nicht immer das wahre...

    Wenn die Data Klassen nicht gefunden werden, ist dies ja auch kein Wunder, wurde mir aber erst nach etlichen anderen Fehlern erst angezeigt, weshalb ich nicht drauf gekommen bin :facepalm:

    Jetzt brauch ich dann nurnoch die Möglichkeit, dem Bewerber mitzuteilen ob angenommen oder abgelehnt und ne kleine Nachricht mitgeben wie, wann und wo

  • Kann man in Templates die Group Permission abfragen, also wenn User A in Group A ist und die permission hat, dann blabla sonst blabla ?

    Habs in meinem Plugin so geregelt, dass die Ausgaben alle auf "einer" Seite sind, also alle domain.tld/application/id

    Es muss halt überprüft werden, welche Phase die appID hat und ob der User die Permission hat, diese sehen zu können

  • Schon klar, aber ich hab ja 3 Permissions. Eine, um die von den Mods zu sehen, eine für Architekten und eine für Devs.

    Ich stell mir das grad so vor, wenn ich alle 3 in die php klasse einfüge, müssen alle 3 Permissions aktiviert sein um überhaupt mal was sehen zu können, oder sehe ich das falsch?


    Edit: Wird ja so definiert: public $neededPermissions = array('mod.application.canViewBuilder');

    Muss ja also überprüfen {if app->phase == 'Builder' AND user has permission ('mod.application.canViewBuilder')} Blabla (sowas in der art ^^ )

  • das ist ein array, es genügt wenn ein user eine der im array angegebenen rechte besitzt um die seite anzuzeigen...

    public $neededPermissions = array('mod.application.canViewBuilder', 'mod.application.canViewBuilder3','mod.application.canViewBuilder');

  • Ja, Du kannst die Benutzerechte im Template abfragen, dabei wird jede Gruppe des Benutzers berücksichtigt. Mit etwas Eigeninitiative hätte man das aber auch über die Suche oder dem WCF selber rausgefunden. Das wird in dutzenden Templates des WCF verwendet:

    Mit Deinem Beispiel von oben:
    {if $__wcf->session->getPermission('mod.application.canViewBuilder')}

  • da kann er aber kein echtes permission denied mehr werfen, wenn er es manuell prüfen will sollte er es trotzdem in der show funktion machen:

    PHP
    if(!WCF::getSession()->getPermission('recht1') && !WCF::getSession()->getPermission('recht2')){
    	throw new PermissionDeniedException();
    }


    setzt natürlich vorraus dass man die beiden entsprechende namespaces zuvor deklariert hat ;)

  • Code
    {if $__wcf->session->getPermission('mod.application.canViewBuilder') && $app->phase == 'Architekt'}

    Ok, kann man doch vergessen das ganze im Template zu überprüfen. Da kommt einfach ne Seite mit nichts, also ohne Header, footer. Nur das Hintergrundbild.

    Also Option B: Es in der Klasse überprüfen


    AbstractPage::$neededPermissions wäre wohl sinnvoller, da kann man in der Klasse mit public $neededPermissions = array('erste.permission', 'zweite.permission'); bequem die Arbeit abwälzen. Davon ab gibt es auch noch WCF::getSession()->checkPermissions() was die Aufgabe nochmal vereinfacht :)


    Gibt es dazu ein Anwendungsbeispiel?

    Bis dato ist das meine Klasse für die Einzelausgabe der Daten in der DB


    Die neededPermissions kann ich also alle auflisten mit nem Komma dazwischen, aber wie und wo überprüfe ich, ob der User mit einer der Perms und der Phase XY die Seite sehen kann?

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!