Stats in der Übersicht - Wie viele Einträge sind vohanden

  • Tag...


    Im WBB gibt es in der Übersicht (Board-List) hinter jedem Board eine Statistik, wie viele Beiträge und Themen darin vorhanden sind.


    Ich bin jetzt so weit gekommen, dass es wohl mit nem Cache Builder zusammen hängt, nur hab ich bis dato kein Plan.



    In meinem Plugin hab ich die Übersicht mit den verschiedenen Phasen welche jeweils Angenommen, in bearbeitung & Abgelent aufreihen


    • Phase1 (Gesamtanzahl)
      • Angenommen (count alle angenommenen)
      • Abgelehnt (count alle abgelehnten)
      • In Bearbeitung (count alle in Bearbeitung)


    Wie setze ich das um? Was brauch ich alles?



    Und wie lasse ich dann nur genau die mit dem jeweiligen Status darin anzeigen, ohne 10.000 templates erstellen zu müssen?
    Sowas wie filtered by state 1 ?


    ~LG
    (Ich hoffe, ich nerve nicht :/ )

    • Official Post

    Es hängt nicht mit dem CacheBuilder zusammen, das wäre in diesem Fall total unsinnig (meiner Meinung nach).


    Die Anzahl der Beiträge und Themen werden in einer eigenen Spalte in der Board-Tablle gespeichert und, wenn sich die Anzahl verändert wird die entsprechende Spalte verändert.


    Lege also einfach drei Spalten an countApproved, … und verändere diese dementsprechend.


    Edit, wenn du keine Board-Spalte hast, lege evt. eine versteckte Option an um die Werte zu speichern.


    Grüße.

  • Du meinst in der SQL tabelle richtig?


    Was bedeutet, ich müsste in meiner Tabelle Phase 3 CountSpalten hinzufügen.


    Wenn ich eine Bewerbung schreibe, muss dann automatisch der Zähler countInProgress eins mehr werden, bzw wenn ich diese bearbeite (annehme/ablehne) der Zähler in countInProgress nach unten gehen und bei einem der anderen beiden nach oben.



    Gibt's was, wonach ich ich mich richten kann? Wüsste theoretisch gerade nicht wie ich das umsetzen soll...

  • Ich muss ja der Tabelle Phasesagen, dann wenn ich einen Eintrag in der Tabelle Application mache, in den Spalten Count der Zähler nach oben geht, bzw nach unten wenn ich einen Eintrag lösche / ändere. Ich weiß nur, wie ich Einträge zählen kann und dann auch gleich ausgeben kann (einfaches php) , aber nicht wie ich das dann in eine andere Tabelle schreibe zum festhalten


    In der Tabelle Phase füge ich dann meine 3 Count Spalten ein

    • Official Post

    Beispielhafte SQL:

    SQL
    ALTER TABE app1_phase ADD count INT(10) NOT NULL DEFAULT '0'


    Du kannst einfach die DatabaseObjectAction nutzen. Wenn du eine Application den state (was bestimmt für die Phase steht oder? Du nutzt nämlich keine Foregin Key's) änderst, änderst du einfach den count mit der entsprechenden Action (und dem counters-Parameter):




    PHP
    $action = new PhaseAction(array($phase), 'update', array(
    	'counters' => array(
    		'count' => 1 /*oder -1*/
    	)
    ));
    $action->executeAction();


    Damit zählst du dann die Spalte count hoch oder runter. Und das machst du dann immer, wenn du eine Bewerbung erstellst oder eine Bewerbung in eine andere Phase verschiebst.

  • Das bringt mich grad komplett durcheinander...


    States trage ich als Zahl ein


    State 0 = rejected
    State 1 = inProgress
    State 2 = assumed


    Also jeweils den Status des Eintrags (angenommen, abgelehnt, in bearbeitung)


    Dementsprechend 3 Count Spalten (inProgress, rejected, assumed) worin jeweils drinn steht, wie viele in Bearbeitung sind, wie viele abgelehnt und wie viele angenommen.

  • Geht natürlich auch, aber es schont die Ressourcen, wenn du den erwähnten Weg einschlägst.


    Mag ja alles sein, aber es ist eben nicht einfach für mich wenn ich da nicht wirklich durchblicke. Zum SELECT COUNT(*) FROM WHERE hab ich vorhin was im WCF gefunden , was ich in meinem Plugin jetzt auch hinbekommen hab. Hier hatte ich einfach ein Verwendungsbeispiel, (UserGroupList) somit tu ich mir leichter.


    Wenn ich von dem, was mir Josh gesagt hat, irgendwie ein Beispiel hätte oder so... muss ja nicht die Lösung auf mich maßgeschneidert werden

    • Official Post

    Wenn ich von dem, was mir Josh gesagt hat, irgendwie ein Beispiel hätte oder so... muss ja nicht die Lösung auf mich maßgeschneidert werden

    Du sollst dir den Code auch nicht zusammenkopieren :/


    Die Frage ist, wo hakt es? Ich habe doch ziemlich genau erklärt, wo du einfach meinen Code einfügen musst, welcher einfach die Zähler hochzählt. Der Rest erledigt sich doch dadurch von alleine :/


    Ansonsten, der Thread (Antworten) hat so ein Counter.


  • Das sind meine beiden Klassen. Aber deswegen bin ich trotzdem durcheinander. Hab nur die AbstractDatabaseObjectAction und die wird in meiner AppAction klasse verwendet. Mehr hab ich net. Und das verwirrt mich, in Post #12 sagtest du es soll nicht in die Action Klasse, also bleibt nurnoch die App.class.php Nur hab ich kein Plan wie bzw. wo dein Code eingefügt werden soll... :/

    • Official Post

    Sorry, ich habe mich in Post #12 vertan. Ich meinte nicht, dass du das nicht in die Action-Klasse tun sollst, sonder nicht in die Form-Klasse.


    In der Action-Klasse ist schon richtig. Dort dann in der update-Methode einfach prüfen, ob der Wert geändert wurde und dementsprechend die counters ändern. Auch in der create-Methode musst du die counter abändern.

  • Hast du dir mal die Klassen angeschaut, von welchen du erbst? Die AbstractDatabaseObjectAction hat bereits eine update Methode. Wenn du etwas an einer Zeile in der Application Tabelle ändern möchtest, erstellst du eine $action = new AppAction($objects, 'update', array('data' => $newData, 'counters' => $counter)) und rufst dann $action->executeAction() auf.


    Deine AppAction Klasse hat an dieser Stelle noch nichts implementiert. Nur die AbstractDatabaseObjectAction erweitert. Daher wird die update Methode in der AbstractDatabaseObjectAction aufgerufen. Schau dir am besten mal den Quellcode dieser Klasse an und versuche nachzuvollziehen, was mit den Daten passiert, die ich im obigen Beispiel mit $newData und $counter an die Action übergeben habe. Denn nur wenn du die abstrakten Klassen des WCF grob verstanden hast, kannst du sie auch benutzen.


    Bezüglich des Zählens musst du dir folgendes klar machen: Du zählst, wie du oben bereits richtig geschrieben hast, nicht in der Application Tabelle, sondern in der Phase Tabelle. Entsprechend brauchst du auch eine PhaseAction Klasse (hast du vermutlich schon) und musst diese zum zählen nutzen.


    Hier eine Skizze des Ablaufs:
    1. Mit dem Absenden eines Formulars wird eine Application von "In Bearbeitung" auf "Angenommen" gesetzt.
    2. In der Form erstellst du eine AppAction und übergibst als Daten, dass der Status sich ändert
    3. Die AppAction Klasse überschreibt die Update Methode, Darin rufst du die parent::update() auf und dann schaust du, ob sich der Status verändert hat, beispielsweise von "In Bearbeitung" zu "Angenommen". Das hat zur Folge, dass von der entsprechenden Phase der inProgressCounter um eins reduziert und der acceptedCounter um eins erhöht werden muss. Du erstellst also in der Update Methode der AppAction eine PhaseAction, in welcher du die Counter um eins reduzierts / erhöhst


    Bei Schritt 3 ist zu beachten, dass die AppAction auch mehrere Objekte / Apps übergeben bekommen hat, welche potentiell unterschiedlichen Phasen zugeordnet sind und auch unterschiedliche Statusänderungen haben.

  • Der Status beim Absenden wird automatisch auf 1 gesetzt (In Bearbeitung) Das passiert als Default in der SQL Spalte.



    Aber irgendwie... Ich bin einfach zu blöd das ganze zu begreifen :(


    Woher z.B. kommt von Josh's schnipsel das ($phase), denn in meiner IDE wird es als undefiniert unterringelt.


    Meine PhaseAction:


Participate now!

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