Bei Bedingung etwas im <head></head> Bereich einbinden

  • Hi,


    ich versuche gerade "krampfhaft" eine bedingung im Head einzubinden, was aber nicht funktioniert.


    PHP
    <?php if ($this->category->id <= 235) { ?>
      Code
    <php } ?>
    
    
    Oder
    
    <?php if ($item->catid <= 235) { ?>
      Code
    <php } ?>


    Liefern nichts zurück.

    Wo ich es versucht habe?

    Direkt in der index.php des Templates (im <head></head> Bereich)

    und in den Tools des Templates (vars.php in diesem Fall)


    Aber ich denke der Ansatz dürfte falsch sein!?


    Wer kann mich in die richtige Richtung schubsen?


    Ziel soll sein, ein Script bei allen Kategorien kleiner 235 im Head-Bereich einzubinden


    Vielen lieben dank für einen Hinweis!

    Mitcha

  • Hätte ich nat. auch gleich fragen sollen, wo und wann eigentlich.


    Aber mal angenommen, die Frage knüpft an deine vor Kurzem an. Du warst in einem Override für eine Kategorieansicht, wo $this->category->id , die im Menüeintrag gewählte war.

    PHP
    <?php
    if ($this->category->id <= 235)
    {
     $myScript = '
     alert("hallo, ich bin der Code");
     ';
    
     JFactory::getDocument()->addScriptDeclaration($myScript);
    }
    ?>
  • Re:Later

    zunächst einmal danke für die Antwort


    Wo?

    Im <head></head> Bereich


    Wann?

    Immer wenn die Cat kleiner 235 ist


    Die Frage aber ist - wo baue ich den Code ein?

    Mache ich das in der index.php des Templates, so wird die Category nicht ausgelesen. Mache ich das in den vars des Templates (dort wo die ganzen .js in den Head geladen werden), so wird das ebenfalls nicht ausgelesen. Der "html" Bereich des Templates wäre falsch, da ich es dort nicht im <head></head> Bereich unterbringen kann.

  • Die Frage aber ist - wo baue ich den Code ein?

    Die JDocuments-Zeile kannst du nahezu überall so verwenden. Du solltest allerdings darauf achten/testen, dass das selbe Script im Seitenquelltext nicht mehrfach erscheint. Dann empfiehlt sich eine Variation.


    Wo du es einfügst, hängt davon ab, wo die Parameter deiner if-Bedingung bekannt sind. Im Template-Code sind das die genannten nicht und müssten erst blöd abgefragt werden.

    Wann?


    Immer wenn die Cat kleiner 235 ist

    Hier geht es eher darum, in welcher Ansicht du dich befindest, in welchem View. Hier also Ansicht einer Kategorie oder eines Einzelartikels oder ... ?


    In einer Kategorie-Ansicht von Beiträgen, also einem zugehörigen Override, sollte mein geposteter Code schon passen.


    In einer Beitragseinzelansicht, die dann z.B. bei Klick auf ein Weiterlesen aufgeht, in einem anderen Override (des article-View nämlich) dann vermutlich erste Zeile ändern,

    Code
    if ($this->item->catid <= 235) 

    In beiden Views ist $this was anderes, ebenso wie es im Template was anderes ist. Reine Definitionssache, je nach Umgebung, in der man sich in der bearbeiteten Datei gerade befindet.

  • Nein, muss nicht - für den Test, den ich vorhabe, klappt das auch im Artikel Override


    Hab jetzt aber das Problem, dass er das <script> openig direkt in andere Scripte mit übernimmt.

    Wie mache ich das, dass der Code im <head></head> einfach übernommen wird?


    PHP
    <?php
    if ($this->category->id <= 235)
    {
     $myScript = '<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
                    <script>(adsbygoogle = window.adsbygoogle || []).push({google_ad_client: "ca-pub-XXX",
                    enable_page_level_ads: true});</script>';
     JFactory::getDocument()->addScriptDeclaration($myScript);
    }
    ?>

    Da wird dann das daraus an Zeile 9 fehlt das </script>:



    Und das sollte bei herauskommen

    Code
    <head>
    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
    <script>(adsbygoogle = window.adsbygoogle || []).push({google_ad_client: "ca-pub-XXX",
    enable_page_level_ads: true});</script>';
    </head>
  • Das <script> muss man bei diesen Methoden nie selbst setzen.

    Code
    JFactory::getDocument()->addScript('//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js', array(), array('async' => true));
    
    $myScript = 'JavaScript-Code ohne <script>-Tags';
    
    JFactory::getDocument()->addScriptDeclaration($myScript);