Ankündigung

Einklappen
Keine Ankündigung bisher.

Canonical Link Tag im Head über Attribut erstellen

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

  • Canonical Link Tag im Head über Attribut erstellen

    Hallo!
    Ich komme leider nicht ans Ziel.
    Ich habe in meinem Custom Catalog mehrere Produkte, die ich gerne mit einem Canonical Tag versehen möchte.
    Finde aber keine Lösung, wie ich das Umsetzen soll.
    Als Attribut habe ich ein einfaches Textfeld mit dem lesbaren Alias "canonical", hier trage ich die kanonische URL ein. https://www.beispiel.de/seite.html
    Für die Produktdetailseite habe ich ein eigenes fe_page-Template angelegt.
    Im Head steht folgendes:
    <re rel="canonical" href="<?php echo $this->field('canonical')->value(); ?>">
    Das geht aber leider nicht.

    Auch wenn ich mir in meinem Reader-Template per <?php echo $this->field('canonical')->value(); ?> in einen DIV mit ID ausgeben lasse, und über die ID per JavaScript das href befüllen lassen möchte, dann geht das nicht. Beispiel hier:

    <div id="canonical"><?php echo $this->field('canonical')->value(); ?></div>

    <script>

    var canonicalDiv = document.getElementById('canonical');

    var canonicalUrl = canonicalDiv.textContent || canonicalDiv.innerText;

    var canonicalLink = document.createElement('link');
    canonicalLink.rel = 'canonical';
    canonicalLink.href = canonicalUrl;

    document.head.appendChild(canonicalLink);
    </script>

    Vielen Dank schonmal für eure Hilfe!

  • #2
    Hallo,
    Inhalte in den Head aus Fremd-Templates ergänzt man am besten über die TL_HEAD Globale.

    CC Leser-Template:

    Code:
    <?php
    $GLOBALS['TL_HEAD'][] = '<rel="canonical" href="'.$this->field('canonical')->value().'">';
    ?>
    http://www.premium-contao-themes.com

    Kommentar


    • #3
      Stopp.....folgender Code funktioniert:

      Code:
      <?php $GLOBALS['TL_HEAD'][] = '<rel="canonical" href="'.$this->field('canonical')->value().'">'; ?>
      Es wurde nur nicht in einer neuen Zeile eingefügt, sondern am Ende einer ganz langen Zeile, die aus den zusätzlichen Head-Angaben aus dem Seiten-Template gekommen sind.
      Kann man da einen Zeilenumbruch erzwingen bzw. eine neue Zeile?

      Kommentar


      • #4
        Es ist Freitext-Code - man dort quasi ergänzen, was man mag.
        Hinweis: Im Quellcode macht es keinen Unterschied, ob ein Zeilenumbruch stattfindet oder nicht. Seiten-Speed optimierter Code z.B. hat idealerweise überhaupt keine Umbrüche.
        Zuletzt geändert von Tim; 18.01.2024, 07:11.
        http://www.premium-contao-themes.com

        Kommentar


        • #5
          Warum funktioniert es nicht ähnlich wie bei Title, Desription und Robots? Da werden die bisherigen Angaben überschrieben.

          HTML-Code:
          <?php
          global $objPage;
          $objPage->pageTitle = $this->field('seitentitel')->value();
          $objPage->description = $this->field('beschreibung_der_seite')->value();
          $objPage->robots = $this->field('robots_tag')->value();
          #$objPage->canonical = $this->field('kanonische_url')->value();
          ?>

          Kommentar


          • #6
            ->canonical ist keine Variable im globalen Page Objekt. Es ist eine Variable im Template-Objekt. Es werden leider einige dieser ehemaligen Funktionen nicht mehr direkt unterstützt. Es wäre natürlich einfacher, wenn Contao dies berücksichtigen würde -> vielleicht versuchst du ein Issue bei Contao.

            Ab 4.13 gibts den HTML response context, der die Überhabe von Meta-Daten erlaubt.

            oben rein ins leser template

            Code:
            <?php
            use Contao\CoreBundle\Routing\ResponseContext\HtmlHeadBag\HtmlHeadBag;
            use Contao\System;
            
            global $objPage;
            $objPage->enableCanonical = true;
            
            $responseContext = System::getContainer()->get('contao.routing.response_context_accessor')->getResponseContext();
            $htmlHeadBag = $responseContext->get(HtmlHeadBag::class);
            $htmlHeadBag->setTitle( 'Hallo Welt' );
            $htmlHeadBag->setMetaDescription( 'Ich bin die Beschreibung' );
            $htmlHeadBag->setCanonicalUri('http://www.google.de');
            ?>
            Zuletzt geändert von Tim; 17.10.2024, 13:23.
            http://www.premium-contao-themes.com

            Kommentar


            • Brubbel
              Brubbel kommentierte
              Kommentar bearbeiten
              Alter ... geht´s noch kompilizierter? ... :-D :-D - Danke, hab´s gerade gebraucht unter 5.3.

              Achtung, da macht oben im Pfad zur Klasse "HtmlHeadBag" der Editor hier ein zusätzliches Leerzeichen mit rein. Wenn das jemand so rauskopiert, dann muss das Leerzeichen zwischen "HtmlHead" und "Bag" entfernt werden.

          • #7
            Hab das Leerzeichen rausgenommen. Danke für den Hinweis.

            Ja, ich weiss auch nicht warum das so kompliziert sein muss. Vielleicht gibt's ja nen leichtern Weg? Ich kenn ihn nicht...
            http://www.premium-contao-themes.com

            Kommentar


            • #8
              Hallo Tim
              Ich checks nicht. Kannst du mir deine Variante bitte noch mit den echten Inhalten füllen anstatt "Hallo Welt"?
              Bei mir schmeisst es die ganze zeit fehler.


              use Contao\CoreBundle\Routing\ResponseContext\HtmlHead Bag\HtmlHeadBag;
              use Contao\System;

              global $objPage;
              $objPage->enableCanonical = true;
              $objPage->pageTitle = $this->field('seitentitel')->value();
              $objPage->description = $this->field('beschreibung_der_seite')->value();
              $objPage->robots = $this->field('robots_tag')->value();
              #$objPage->canonical = $this->field('kanonische_url')->value();

              $responseContext = System::getContainer()->get('contao.routing.response_context_accessor')->getResponseContext();
              $htmlHeadBag = $responseContext->get(HtmlHeadBag::class);
              $htmlHeadBag->setTitle($objPage->pageTitle);
              $htmlHeadBag->setMetaDescription( 'Ich bin die Beschreibung' );
              $htmlHeadBag->setCanonicalUri('http://www.google.de');
              ?>

              Wie muss ich den $htmlHeadBag->setTitle($objPage->pageTitle); setzen, damit es funktioniert?

              Kommentar


              • #9
                Wie gesagt, das customcatalog_productcatalog_reader Template macht es vor.

                Ausgehend von deinem Snippet oben wäre das:

                HTML-Code:
                <?php
                use Contao\CoreBundle\Routing\ResponseContext\HtmlHead Bag\HtmlHeadBag;
                use Contao\System;
                global $objPage;
                $objPage->pageTitle = $this->field('seitentitel')->value();
                $objPage->description = $this->field('beschreibung_der_seite')->value();
                $responseContext = System::getContainer()->get('contao.routing.response_context_accessor')->getResponseContext();
                $htmlHeadBag = $responseContext->get(HtmlHeadBag::class);
                $htmlHeadBag->setTitle( $this->field('seitentitel')->value() ?? '' );
                $htmlHeadBag->setMetaDescription( $this->field('beschreibung_der_seite')->value() ?? '' );
                // cannonicals
                //$objPage->enableCanonical = true;
                //$htmlHeadBag->setCanonicalUri('http://www.google.de');
                ?>
                http://www.premium-contao-themes.com

                Kommentar


                • #10
                  Ok, jetzt hat es geklappt. Danke

                  Kommentar

                  Lädt...
                  X