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, 08: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, 14: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

            Lädt...
            X