Daten aus Boxen (z.b. neuste Beiträge) auf Template Seite darstellen

  • So ich habe jetzt es gut hinbekommen.

    Leider komme ich bei den letzten Schritt nicht weiter.

    PHP
    <?php
    use wbb\data\thread\AccessibleThreadList;
    use wcf\system\WCF;
    $threadList = new AccessibleThreadList();
    $threadList->sqlLimit = 5;
    $threadList->sqlOrderBy = "thread.lastPostTime DESC";
    $threadList->readObjects();
    $assignVariables['homeThreads'] = $threadList->getObjects();
    WCF::getTPL()->assign($assignVariables);
    ?>

    Ich möchte nämlich diesen Code vom Forum in das vom VieCode Shop umschreiben.

    Ich hoffe jemand hat eine Idee!

    Gruß

    Trixious

    Mfg

    Saphire-Dev

  • Ich habe das ganze jetzt mal nachgebaut und wollte nun die ganzen Beiträge "filtern".

    Ich habe 2 Boxen erstellt mit jeweils 2 anderen "filtern".

    Die erste Box soll nur Changelogs anzeigen, diese Beiträge können in folgenden boardID's stehen: 3,4 und 5

    Folgender Code für diese Box:

    Was zeigt die Box an? Sie zeigt die letzten 5 Beiträge aller Foren. Dabei sollte hier derzeit maximal 1 Beitrag gezeigt werden.


    Dann haben wir noch meine 2 Box die "news" Box.

    Hier haben wir das gleiche wie oben nur das er aus einem Board nur die Threads beziehen soll.

    Und diese Box zeigt nur 1 Beitrag, und das ist der eine Beitrag der in der boardID 4 liegt.


    Die boxen zeige ich auf einer Template Seite an, diese Seite soll später als Startseite dienen. Auf dieser Seite muss ich auch noch php Code einfügen, da sonst die Seite crasht.

    PHP
    <?php
    use wbb\data\thread\AccessibleThreadList;
    use wcf\system\WCF;
    $threadList = new AccessibleThreadList();
    $threadList->sqlLimit = 5;
    $threadList->sqlOrderBy = "thread.lastPostTime DESC";
    $threadList->readObjects();
    $assignVariables['homeThreads'] = $threadList->getObjects();
    WCF::getTPL()->assign($assignVariables);
    ?>


    ich Frage mich nun wo die 2 Boxen scheitern das dieser "filter" nicht ganz funktioniert. Oder habe ich den Filter falsch verstanden? Denn mit einer Box hat der "filter" gut funktioniert und ich habe z.B. nur meine Changelogs gesehen.


    Hier kann man sich das ganze mal anschauen.

    https://identitygrp.net/index.php?startseite/

  • Verwende doch für die drei IDs boardID IN () statt NOT IN. :)

    Wenn du nur den letzten Beitrag sehen willst, setzt du sqlLimit auf 1. Das bestimmt wie viele Beiträge aus der Datenbank gelesen werden sollen.

  • Danke, das ist viel eleganter als NOT IN.

    Jetzt verstehe ich nicht ganz warum es so gerade funktioniert wie es funktioniert.

    Ich habe die Template Seite, wo ich meine boxen einfüge. Damit die seite nicht mit einem Error Crasht, fülle ich die Seite mit dem PHP Code um die Daten zu bekommen. Der PHP Code den ich auf der Template Seite festlege gilt dann für die erste Box (in diesem Fall die Changelogs box) und der PHP Code den ich in der Box Changelogs fest lege gilt dann in der Box News. Warum passiert das gerade so? Es funktioniert jetzt nun wie gewollt, aber etwas irreführend wenn ich den Code für eine Box bestimme, dieser aber dann nicht für diese Box gilt.

  • Bin fast am ziel, nur das Sortieren de Artikel klappt nicht :(

    Ich hatte diesen Thread erst heute durch einen Hinweis gefunden. Vor kurzem hatte ich, da ich von diesem Thread ja nichts wusste einen ähnlichen erstellt, wo es mir darum ging die Box "Foren-Disussionen" von der Woltlab-Startseite nachzubauen. Das ist mir jetzt Dank dieses Threads recht gut gelungen.

    Nun möchte ich eine zweite Box mit den neuesten Artikel haben.

    Doch irgendwie klappt das noch nicht mit dem php Code und dem Code für das Template von HTMH nicht. Aber in diesem Posting:

    RE: Daten aus Boxen (z.b. neuste Beiträge) auf Template Seite darstellen

    schreibt er, dass es jetzt funktioniert.

    Darf ich mal erfahren, wie da der php- und der Template-Code aussieht?

    Und dann noch eine Frage. Ich möchte gerne noch eine dritte Box haben. Und zwar eine die die neuesten Termine "abgespeckt" anzeigt.

    Also es soll bei mir drei Boxen nebeneinander geben. So wie auf der Woltlab Startseite. In der ersten Box die "Foren-Diskussionen". In der zweiten Box die "Neuesten Artikel" (wo hier im Thread ja schon was zu steht) und eine dritte Box "Neueste Termine", wo ich echt Jemand brauche der mir sagt, was beim php-Code und beim Template rein kommt.

  • Artikel habe ich jetzt hinbekommen.

    und für die Ausgabe:

    Was mir jetzt noch fehlt, ist das Gleiche für die neuesten Termine, also Kalendereinträge. Da brauche ich Hilfe was da als php-Code stehen muss und was bei der Ausgabe zwischen foreach rein kommt.

  • Also bei der Ausgabe würde ich dann dies einsetzen. Bin mir aber sehr, sehr unsicher. Und was mir fehlt ist auch halt der php-Code.

    Code
    {foreach from=$objects item=event}
    <small>
    {@$event->getFirstEventDate()->getFormattedTimeFrame()}
    </small>
    <a href="$event->getFirstEventDate()}">
    <h3>{$event->getTitle()}</h3></a>
    {/foreach}
  • Und was mir fehlt ist auch halt der php-Code.

    Dann leite das doch einfach von deiner Artikel-Liste ab;)

    Was steht in den ersten beiden Zeilen

    PHP
    <?php
    use wcf\system\WCF;
    use wcf\data\article\AccessibleArticleList;

    wo könnte jetzt die AccessibleEventList stehen??

    Bitte jetzt nicht einfach stumpf ersetzen sondern vorher überlegen um welche App es sich handelt -> Kalender

    z.B. das Forum von

    wbb\data\thread\AccessibleThreadList; = wbb

    Artikel aus dem Core = wcf

  • Schon am schwitzen:/^^

    Ich hätte dir auch gleich den passenden Code geben können.;)

    Wollte nur vermeiden das einfach Copy & Paste gemacht wird, ohne zu verstehen was du da überhaupt machst.

    Später wirst du arge Probleme kriegen wenn dieser Code auch für andere Sachen eingesetzt werden soll oder sich ändert.

    Somit kann man dann auch später Apps wie Filebase/Blog/etc. aus den Codes davon ableiten und in PHP-Boxen verwenden.

    Hier die Lösung:

    PHP
    <?php
    use calendar\data\event\AccessibleEventList;
    use wcf\system\WCF;
    $eventList = new AccessibleEventList();
    $eventList->sqlLimit = 5;
    $eventList->sqlOrderBy = "event.eventDate DESC";
    $eventList->readObjects();
    WCF::getTPL()->assign("homeCalendarEvents", $eventList->getObjects());
    ?>

  • Ich war noch gar nicht dazu gekommen es selber zu probieren.

    Allerdings hatte ich bereits heute vormittag meine Ideen zur Umsetzung des php-Codes. Der sah bei mir so aus:

    PHP
    <?php
    use wbb\data\calendar\AccessibleCalendarList;
    use wcf\system\WCF;
    $calendarList = new AccessibleCalendarList();
    $calendarList->sqlLimit = 5;
    $calendarList->sqlOrderBy = "article.publicationDate DESC";
    $calendarList->readObjects();
    WCF::getTPL()->assign("homeCalendars", $calenderList->getObjects());
    ?>

    Mir war da aber nicht bewußt, dass es Eventlist und nicht Calenderlist ist. Ansonsten war der Ansatz doch (bis ich glaube einen Fehler, ich wusste nicht was in Zeile 6 rein kommt und hatte daher als Platzhalter den Eintrag aus der Artikel-Box genommen) schon mal sehr gut, oder? :saint:

    Die Ausgabe habe ich jetzt auch hinbekommen. Passe ich aber noch ein wenig den anderen Boxen an.

    Code
    {foreach from=$homeCalendarEvents item=event}
    <small>
    {@$event->time|time} 
    </small>
    <a href="{$event->getLink()}">
    <h3>{$event->getTitle()}</h3></a>
    {/foreach}

    Eine Sache erkenne ich noch nicht und finde es einfach nicht raus. Bei der Ausgabe der neuesten Artikel und der neuesten Termine erscheint der neueste Eintrag in der Ausgabe nicht oben, sondern unten. Also die falsche Sortierung. Wie kriege ich die richtig hin?

  • Mhhh, irgendwas stimmt nicht.

    Also, bei den neuesten Beiträgen steht bei mir als php-Code:

    PHP
    <?php
    use wbb\data\thread\AccessibleThreadList;
    use wcf\system\WCF;
    $threadList = new AccessibleThreadList();
    $threadList->sqlLimit = 5;
    $threadList->sqlOrderBy = "thread.lastPostTime DESC";
    $threadList->readObjects();
    $assignVariables['homeThreads'] = $threadList->getObjects();
    WCF::getTPL()->assign($assignVariables);
    ?>

    Da ist die Sortierung richtig. Also der neueste Beitrag oben. Ändere ich DESC auf ASC ist es genau anders rum.

    Bei den neuesten Artikeln ist der php-Code:

    PHP
    <?php
    use wcf\system\WCF;
    use wcf\data\article\AccessibleArticleList;
    $articleList = new AccessibleArticleList();
    $articleList->sqlLimit = 5;
    $articleList->sqlOrderBy = "article.publicationDate DESC";
    $articleList->readObjects();
    WCF::getTPL()->assign("homeArticles", $articleList->getObjects());
    ?>

    Dort wird der älteste Artikel oben angezeigt. Ändere ich DESC auf ASC gibt es keine Veränderung.

    Bei den neuesten Terminen ist der php-Code:

    PHP
    <?php
    use calendar\data\event\AccessibleEventList;
    use wcf\system\WCF;
    $eventList = new AccessibleEventList();
    $eventList->sqlLimit = 5;
    $eventList->sqlOrderBy = "event.eventDate DESC";
    $eventList->readObjects();
    WCF::getTPL()->assign("homeCalendarEvents", $eventList->getObjects());
    ?>

    Dort wird der älteste Termin oben angezeigt. Ändere ich DESC auf ASC wird, so wie ich es will der neueste Termin oben angezeigt.

    Was mache ich da falsch?

  • Habe bis jetzt getestet. Nee neue Box erstellt und und und ... ich kriege da die Sortierung bei den neuesten Artikeln nicht hin.

    Liegt es vielleicht am Quelltext der Ausgabe. Da steht bei mir:

    Muss da bei {@$article->time|time} vielleicht was anderes hin?

    Irgendwie komisch. :(

    Sieht übrigens so auf der Demo-Seite aus:

    https://a-b-community.de/index.php?demo/

    Aus Artikel habe ich Kolumnen gemacht.

    2 Mal editiert, zuletzt von Edda1000 (5. September 2020 um 21:54)

  • Muss da bei {@$article->time|time} vielleicht was anderes hin?

    Das stimmt schon so;) Ich musste auch erstmal ein Blick in die Datenbank werfen.

    In der Tabelle wcfx_article mit der Spalte publicationDate gibt es nur die Zahl 0 oder 1 wie ich das sehe.

    Also können die Artikel über diesen Wert garnicht sortiert werden.

    Mach es mit time;)

    gn5VmUKCtv6ekrMf hatte das auch schon mal erwähnt > Suchfunktion einfach mal nutzen^^

    Sieht übrigens so auf der Demo-Seite aus:


    https://a-b-community.de/index.php?demo/

    Sieht doch schon ganz gut aus.:thumbup:

    Man könnte jetzt noch das entsprechende Avatar / Usernamen hinzufügen.

    Ist das Absicht das du den Timestamp über die Überschrift gesetzt hast?

  • Mit timehat es funktioniert.

    Ich hatte den Beitrag dazu gelesen, dachte aber, dass der Hinweis bzw.. der Tipp sich auf den Code der Ausgabe bezog.

    Wie war ich auf diese Idee gekommen?

    Nachdem ich mir die Box mit den neuesten Beiträgen über den Code des siebten Beitrages aus dem Thread gebastelt hatte, ging es an die Box der neuesten Artikel. Dort hatte ich für den Timestamp den Code von der Box der neuesten Beiträge also:

    {@$thread->lastPostTime|time}

    den Artikeln entsprechend auf:

    {@$article->|time}

    geändert. Bei der Ausgabe kam es zu einer Fehlermeldung und bin darüber auf das Posting gestoßen, es mit time zu versuchen. Habe das Posting wohl inhaltlich nicht richtig verstanden. Was habe ich aus der Info gemacht. Ich habe den Code auf:

    {@$article->time|time}

    geändert und die Ausgabe funktionierte, nur in der falschen Reihenfolge. Jetzt habe ich den Sinn des Postings über time erst verstanden.

    Den Timestamp hatte ich bewusst an den Anfang gesetzt. Könnte mir aber vorstellen, das er am Ende der Ausgabe zusammen mit dem Avatar und Usernamen gut aussieht. Halt so, wie auf Deinem Screenshot. Den Code dafür, zumindest für die neuen Beiträge dürften glaube ich im siebten Posting stehen. Muss ich heute im laufe des Tages mal probieren.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!