Ankündigung

Einklappen
Keine Ankündigung bisher.

4.9 Merkliste Hinzufügen funktioniert nicht, wenn "replaceInsertTags" im Template

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • filipt
    antwortet
    Zitat von Tim Beitrag anzeigen
    Kann sein, dass getContentElement noch mehr reinpackt. mit |uncached funktioniert es in jedem Fall direkt im Template.
    Der Custom-Code funktioniert ohne Fehler ohne den |uncached Flag, komischerweise. Also liegt es nicht an dem was getContentElement noch dazupacken könnte.

    Einen Kommentar schreiben:


  • Tim
    antwortet
    Kann sein, dass getContentElement noch mehr reinpackt. mit |uncached funktioniert es in jedem Fall direkt im Template.

    Einen Kommentar schreiben:


  • filipt
    antwortet
    Zitat von Tim Beitrag anzeigen
    $HTMLcontent wird durch die Globale bei dir noch gesetzt. Du hast hier wohl einen Array generiert, nicht einen direkten String. Das musst du vorher korrigieren.
    Die Inserttags produzieren keine Fehler.
    Ich hab hier nur zur Veranschaulichung beide verschiedene Wege HTMLcontent zu befüllen drin gelassen. Zum testen nehme ich natürlich immer das jeweilig andere raus.

    Wenn ich versuche $HTMLcontent zu exploden ohne die Globale, funktioniert das leider immer noch nicht. Ich kann die Variable auch normal ausgeben, was bei einem Array ja nicht möglich sein sollte.

    Einen Kommentar schreiben:


  • Tim
    antwortet
    $HTMLcontent wird durch die Globale bei dir noch gesetzt. Du hast hier wohl einen Array generiert, nicht einen direkten String. Das musst du vorher korrigieren.
    Die Inserttags produzieren keine Fehler.

    Einen Kommentar schreiben:


  • filipt
    antwortet
    Sorry, hatte die Nachricht erst jetzt gesehen. Wenn ich versuche das inserttag mit |uncached zu callen bekomme ich folgenden Fehler:

    Code:
    [2021-04-14 10:17:35] request.INFO: Matched route "tl_page.2604". {"route":"tl_page.2604","route_parameters":{"_token_check":true,"_controller":"Contao\\FrontendIndex::renderPage","_scope":"frontend","_locale":"de","pageModel":"[object] (Contao\\PageModel: {})","parameters":"","_route":"tl_page.2604"},"request_uri":"https://www.ims-robotics.de/de/produkte-finden","method":"GET"} []
    [2021-04-14 10:17:35] security.INFO: Populated the TokenStorage with an anonymous Token. [] []
    [2021-04-14 10:17:35] request.CRITICAL: Uncaught PHP Exception Error: "Minimum value must be less than or equal to the maximum value" at /kunden/324334_01458/webseiten/contao/2102/templates/layout/customcatalog_ims_products_list.html5 line 13 {"exception":"[object] (Error(code: 0): Minimum value must be less than or equal to the maximum value at /kunden/324334_01458/webseiten/contao/2102/templates/layout/customcatalog_ims_products_list.html5:13)"} []
    Zeile 13 in meinem Code ist die Funktion random_int die nicht normal funktioniert, da die Variable $HTMLContent (der inserttag) hier nicht mehr über explode in ein Array umgewandelt wird. Also davor hat explode("<wbr/>",$HTMLcontent); 4x Elemente in ein Array gepackt, jetzt mit dem uncached Flag ist es nur noch 1x Element im Array. Kann man ein uncached Inserttag nicht exploden nach einem String?

    Wenn ich das Inserttag mit |refresh setze, dann tritt der gleiche Fehler auf wie ohne die Flagge. Also der Merkliste werden die Items nicht hinzugefügt.


    PHP-Code:
    if ($GLOBALS['TL_LANGUAGE'] == 'de') {
        
    $HTMLcontent $this->replaceInsertTags('{{insert_content::108275|uncached}}');
    } else {
        
    $HTMLcontent $this->replaceInsertTags('{{insert_content::108517|uncached}}');
    };
    $HTMLcontent $GLOBALS['TEST'];
    $einklinker1 explode("<wbr/>",$HTMLcontent); /* wenn ich die Globale verwende, dann sind es 4x Strings im Array, wenn ich |uncached verwende, ist es nur 1x String im Array */
    $objLength count($einklinker);
    $einklinker2 array_slice($einklinker11$objLength-2);
    $length count($einklinker2);
    $randomArticle random_int(0$length-1);
    $rand_stopper $einklinker2[$randomArticle];
    $i 0
    Zuletzt geändert von filipt; 14.04.2021, 09:42.

    Einen Kommentar schreiben:


  • Tim
    antwortet
    Ok das "Problem" ist da Caching-Verhalt der Inserttags, denke ich und weil hier quasi replaceInsertTags verschachtelt angewendet wird. Contao fährt über das gesamte Template ebenfalls am Ende ein replaceInsertTags.

    Setz mal deine insert_content Inserttags inkl. uncached Flagge (oder refresh): <?php echo $this->replaceInsertTags('{{insert_content::1234556|uncached}}'); ?>

    https://docs.contao.org/manual/de/ar...ng/insert-tags




    Einen Kommentar schreiben:


  • Tim
    antwortet
    Ich muss mir das Phänomen noch tiefer anschauen. Ich ändere auch etwas den Template-Verlauf vom mod_customcatalog zum customcatalog_

    Mir ging es in erster Linie hier um eine schnelle Problemlösung bzw. Workaround. Der Weg funktioniert quasi überall, Hauptsache die Globale wird vor dem customcatalog_ Template befüllt. Die langconfig ist in jedem Fall davor

    Zuletzt geändert von Tim; 12.04.2021, 07:55.

    Einen Kommentar schreiben:


  • filipt
    antwortet
    Zitat von Tim Beitrag anzeigen
    Hast recht. ->customcatalog feuert vor dem mod_ Template. My bad.

    Du kannst es noch eine Ebene höher machen z.B. langconfig (falls so hoch deklariert, muss event. das Template direkt in /templates liegen, damit es global erkannt wird)
    $GLOBALS['TEST'] = Controller::getContentElement(ID-DES-INHALTSELEMENTS);
    Nachdem ich alle html5 templates die im CE benötigt sind auf die templates/ ebene gelegt habe, funktioniert es jetzt so wie es sollte. Richtig fühlt sich diese Lösung nicht wirklich an. Falls du eine Alternative zu dem Globale setzen in der Langconfig findest, nehme ich diese gerne irgendwann auch in meine templates.

    Trotzdem danke für die schnelle Hilfe!

    Einen Kommentar schreiben:


  • Tim
    antwortet
    Hast recht. ->customcatalog feuert vor dem mod_ Template. My bad.

    Du kannst es noch eine Ebene höher machen z.B. langconfig (falls so hoch deklariert, muss event. das Template direkt in /templates liegen, damit es global erkannt wird)
    $GLOBALS['TEST'] = Controller::getContentElement(ID-DES-INHALTSELEMENTS);
    Zuletzt geändert von Tim; 09.04.2021, 13:13.

    Einen Kommentar schreiben:


  • Tim
    antwortet
    Es muss eine Globale sein.

    mod_customcatalog:

    $GLOBALS['custom_stopper'] = 'hallo';
    $this->customcatalog (durchläuft customcatalog_)

    customcatalog_
    echo $GLOBALS['custom_stopper']; // hallo

    Einen Kommentar schreiben:


  • filipt
    antwortet
    Zitat von Tim Beitrag anzeigen
    Platziere das inserttag ausserhalb z.B. im mod_customcatalog vor der $this->customcatalog Ausgabe und lege die HTML Ausgabe in eine Globale und greife die im foreach ab. $this->customcatalog ist quasi die Ausgabe des customcatalog_ Templates.
    Jede Globale, die vorher deklariert wird ist darin aufrufbar.
    Dazu hab ich jetzt noch eine technische Frage. Wenn ich im mod_customcatalog Template die Variable $GLOBALS['custom_stopper'] oder direkt $custom_stopper definiere, kann ich diese nicht als $GLOBALS['custom_stopper'] oder als $custom_stopper im Listentemplate ausgeben. Beide Variablen sind bei mir leer.

    Ist da was an meiner Denkweise falsch? Der Code steht vor dem $this-customcatalog.

    Einen Kommentar schreiben:


  • Tim
    antwortet
    Platziere das inserttag ausserhalb z.B. im mod_customcatalog vor der $this->customcatalog Ausgabe und lege die HTML Ausgabe in eine Globale und greife die im foreach ab. $this->customcatalog ist quasi die Ausgabe des customcatalog_ Templates.
    Jede Globale, die vorher deklariert wird ist darin aufrufbar.
    Zuletzt geändert von Tim; 09.04.2021, 11:56.

    Einen Kommentar schreiben:


  • filipt
    antwortet
    Ich würde gerne innerhalb des Foreach Loops diesen Stopper einblenden lassen.

    Ich kann das notfalls natürlich auch über JS so lösen, das das HTML dann nachträglich hinzugefügt wird. Die Lösung direkt über PHP wäre mir hier lieber, da das dann performanter im frontend abläuft.

    Gibt es da keine Lösung? Weswegen tritt dieser Fehler eigentlich auf?

    Einen Kommentar schreiben:


  • Tim
    antwortet
    Platziere deine Inserttag ausserhalb des customcatalog_ Templates z.B. im mod_customcatalog Template. Das sollte besser klappen.

    Einen Kommentar schreiben:


  • filipt
    antwortet
    Zitat von Tim Beitrag anzeigen
    In meiner lokalen Testumgebung kann ich es nicht reproduzieren. Ich teste es noch online gegen...

    Auch online sehe ich keine Probleme: http://dev.premium-contao-themes.com/catalog-297.html
    Wenn du ein Objekt auf die Merkliste setzt, updated sich bei deinem Beispiel auch oben rechts die Zahl nicht, bzw. auf der notelist seite wird nichts angezeigt. Ich teste das gerade im FF Developer Edition. (Bei Chromium Browsern ebenfalls nicht.)
    Angehängte Dateien
    Zuletzt geändert von filipt; 09.04.2021, 11:21.

    Einen Kommentar schreiben:

Lädt...
X