Contao-Camp 2024
Ergebnis 1 bis 12 von 12

Thema: Nachrichtenliste ohne Rendern der kompletten Nachrichten

  1. #1
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.792

    Frage Nachrichtenliste ohne Rendern der kompletten Nachrichten

    Gibt es ein News-Modul, das nur den Teaser an das Template liefert und nicht die Inhaltselemente? Im Moment ist es ja so, das die ganzen News-Module immer die gesamten Nachrichten inkl. Inhaltselemente rendern, obwohl die Inhaltselemente meistens nicht benötigt werden. Das sorgt natürlich für ganz schönen Overhead und die Nachrichtenseite wird sehr langsam, wenn z.B. Bildergalerien in den Inhaltselementen sind. Hat jemand so ein Modul schon programmiert oder muß ich mich morgen selbst ransetzen und einen Clone des entsprechenden Core-Moduls erstellen?
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

  2. #2
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.896
    Partner-ID
    10107

    Standard

    In Contao 3.5+ werden die Inhaltselemente nur dann geladen, wenn du sich auch tatsächlich im Template ausgibst:



    Du musst nur darauf aufpassen, dass deine Templates
    PHP-Code:
    if ($this->hasText()) 
    statt
    PHP-Code:
    if ($this->text
    benutzen, falls du abfragen willst, ob es einen Detailinhalt gibt.

  3. #3
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.792

    Standard

    Ich habe bisher $this->text benutzt.
    Der Code in ModuleNews.php sieht mir aber nicht so aus, als ob "Rendere die Inhaltselemente nur, wenn $this->text im Template steht" hier gilt. Sieht eher so aus, als ob das immer gerendert wird, egal ob $this->text vorhanden ist oder nicht.

    Mit $this->hasText habe ich im Moment keine messbaren Veränderungen feststellen können. Die Template-Variablen habe ich mir aber noch nicht ausgeben lassen. Wenn $this->text dort nicht zu finden ist (was ich nicht glaube), dann wird wohl doch nichts gerendert.
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

  4. #4
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.896
    Partner-ID
    10107

    Standard

    Zitat Zitat von Samson1964 Beitrag anzeigen
    Ich habe bisher $this->text benutzt.
    Der Code in ModuleNews.php sieht mir aber nicht so aus, als ob "Rendere die Inhaltselemente nur, wenn $this->text im Template steht" hier gilt.
    Doch, so ist das aber .



    Zitat Zitat von Samson1964 Beitrag anzeigen
    Sieht eher so aus, als ob das immer gerendert wird, egal ob $this->text vorhanden ist oder nicht.
    Was meinst du damit?



    Zitat Zitat von Samson1964 Beitrag anzeigen
    Wenn $this->text dort nicht zu finden ist (was ich nicht glaube), dann wird wohl doch nichts gerendert.
    $this->text wird immer da sein.

  5. #5
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.792

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Zitat Zitat von Samson1964
    Sieht eher so aus, als ob das immer gerendert wird, egal ob $this->text vorhanden ist oder nicht.
    Was meinst du damit?
    PHP-Code:
    $objTemplate->text = function () use ($id)
    {
        
    $strText '';
        
    $objElement = \ContentModel::findPublishedByPidAndTable($id'tl_news');
        if (
    $objElement !== null)
        {
            while (
    $objElement->next())
            {
                
    $strText .= $this->getContentElement($objElement->current());
            }
        }
        return 
    $strText;
    }; 
    Ich dachte erst, hier werden die Inhaltselemente zugewiesen. Ich verstehe dieses Konstrukt nicht ganz: Hier wird der Templatevariablen $text eine Funktion zugewiesen, die die ganzen Inhaltselemente rendert und in $strText zurückgibt? Oder wird hier noch nichts gerendert?

    Ich werde jetzt mal die Zeit messen, wie lange diese paar Codezeilen abgearbeitet werden und testweise die Zeilen danach auch mal auskommentieren.
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

  6. #6
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.896
    Partner-ID
    10107

    Standard

    Genau, hier wird eine Funktion einer Variable zugewiesen. Die Funktion wird aufgerufen, wenn du die Variable benutzt.

  7. #7
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.792

    Standard

    Interessant. Bei der Zeitmessung habe ich festgestellt, das ich da nach 0,00000 Sekunden immer raus bin. Es wird also praktisch eine Funktion definiert, die von PHP erst ausgeführt wird, wenn die Variable benutzt wird. Mit der Benutzung von $this->text im Template habe ich PHP also dazu gezwungen, die Funktion auszuführen und somit Zeit zu verlieren, die ich mir mit $this->hasText gespart hätte.
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

  8. #8
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.792

    Standard

    Ich habe im Nachrichten-Template mehrere Zeitmessungen gemacht (8 Nachrichten, 3 Tests). Mit $this->text brauchte ich insgesamt 3,349 Sekunden, mit $this->hasText nur 0,023 Sekunden. Ich war also 145 mal schneller!
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

  9. #9
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.896
    Partner-ID
    10107

    Standard

    Implementiert wurde das in Contao 3.5.0 (wobei hasText erst später dazu gekommen ist). Siehe https://github.com/contao/core/issues/7614 & https://github.com/contao/core/issues/7993

  10. #10
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.792

    Standard

    Irgendwie hatte ich in Erinnerung, das vorher alles ungefragt gerendert ausgeliefert wurde. Gut zu wissen, das es in PHP möglich ist, komplexe Aufgaben erst dann auszuführen, wenn die Variable wirklich verwendet wird.

    Jetzt suche ich nur noch nach einer Möglichkeit, die Zeit für das Rendern der Inhaltselemente einer Seite zu ermitteln. Gehört zwar nicht mehr direkt zum Thema ...
    Gibt es ein Vater-Template welches von jedem Inhaltselement verwendet wird, wo ich meine Zeitmessung machen kann? Oder muß ich in irgendeine Core-Datei reingehen?
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

  11. #11
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.896
    Partner-ID
    10107

    Standard

    Zitat Zitat von Samson1964 Beitrag anzeigen
    Irgendwie hatte ich in Erinnerung, das vorher alles ungefragt gerendert ausgeliefert wurde.
    Vor 3.5.0 ja


    Zitat Zitat von Samson1964 Beitrag anzeigen
    Jetzt suche ich nur noch nach einer Möglichkeit, die Zeit für das Rendern der Inhaltselemente einer Seite zu ermitteln. Gehört zwar nicht mehr direkt zum Thema ...
    Gibt es ein Vater-Template welches von jedem Inhaltselement verwendet wird, wo ich meine Zeitmessung machen kann? Oder muß ich in irgendeine Core-Datei reingehen?
    Hm, naja meinst du jetzt einfach den Detailinhalt einer News? Du könntest ja einfach vor und nach
    PHP-Code:
    <?= $this->text ?>
    eine Zeitmessung machen.

  12. #12
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.792

    Standard

    Nein, nicht die News. Die Inhaltselemente in normalen Seiten. Mit den News habe ich das ja schon gemacht. Jetzt will ich die langsamen Inhaltselemente (z.B. auf meiner Startseite) finden.
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •