Contao-Camp 2024
Ergebnis 1 bis 8 von 8

Thema: Numerische Artikel-ID wieder umstellen auf Artikelalias

  1. #1
    Contao-Nutzer
    Registriert seit
    07.04.2010.
    Ort
    Berlin
    Beiträge
    155

    Standard Numerische Artikel-ID wieder umstellen auf Artikelalias

    Ich steht grad auf dem Schlauch: Bisher war ich es gewohnt, daß im Frontend immer der Artikelalias als ID des jeweiligen Artikels ausgegeben wird. Seit Contao4 wird als ID aber eine Nummerierung angezeigt (article-2, article-3, article-4 usw.). Der Code im Template ist immer noch der selbe wie in Contao3:

    HTML-Code:
    <?= $this->cssID ?>
    Kann mir jemand sagen wo/wie ich die Artikel-ID wieder auf das Artikelalias umstellen kann? Vielleicht hat es auch nicht mit der Contao-Version zu tun, aber mir ist das erst jetzt mit Contao4 ausgefallen.

  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

    Ja, das wurde in Contao 4 geändert. Siehe https://github.com/contao/core-bundl...rticle-css-ids

    Ändern kann man das nicht.

  3. #3
    Contao-Nutzer
    Registriert seit
    07.04.2010.
    Ort
    Berlin
    Beiträge
    155

    Standard

    Ah, OK. Lag also doch an Contao4.
    Ich verstehe zwar nicht ganz den Sinn hinter dieser Änderung, weil es für den Aufbau einer Artikel-Ankernavigation und aus SEO-Gründen schon besser ist den Alias als ID zu verwenden. Aber ich vermute mal, es wird einen guten Grund gehabt haben ;-)

    Ich habe jetzt ein Workaround gebastelt mit dem man sich trotzdem den Artikelalias als ID anzeigen lassen kann.

    Im Template mod_article muss

    HTML-Code:
    <?= $this->cssID ?>
    ersetzt werden durch

    HTML-Code:
    id="<?= $this->alias ?>"

  4. #4
    Contao-Nutzer Avatar von alexgr
    Registriert seit
    01.10.2012.
    Beiträge
    69

    Standard

    Alter Thread, ich weiß, aber:

    Zitat Zitat von Balduin Beitrag anzeigen
    Im Template mod_article muss

    HTML-Code:
    <?= $this->cssID ?>
    ersetzt werden durch

    HTML-Code:
    id="<?= $this->alias ?>"
    Ganz so einfach ist es nicht, denn dann würde ja immer der Alias ausgegeben, auch wenn man in den Artikeleinstellungen eine eigene CSS-ID vergibt. Außerdem wurde unter 3.5 nicht einfach der exakte Alias verwendet, sondern
    PHP-Code:
    standardize($alias
    Das geschieht in 3.5 in ModuleArticle hier:
    https://github.com/contao/core/blob/...rticle.php#L95

    In 4.4 wird der Alias nicht mehr standardisiert, weil nicht mehr mit einer Ausgabe als CSS-ID gerechnet wird. Das heißt darum muss man sich auch selber kümmern, wenn man es genau so haben will wie es unter 3.5 war.

    Insgesamt setze ich also Folgendes an den Anfang von mod_article.html5:

    PHP-Code:
    <?php
      $cssID 
    $this->cssID;
      if (
    $cssID === ' id="article-'.$this->id.'"') {
        
    $cssID ' id="'.\StringUtil::standardize($this->alias).'"';
      }
    ?>
    und ersetze
    PHP-Code:
    <?= $this->cssID ?>
    durch
    PHP-Code:
    <?= $cssID ?>
    Geschmacksweise geht oben natürlich auch:
    PHP-Code:
    <?php
      $cssID 
    = ($this->cssID === ' id="article-'.$this->id.'"')
               ? 
    ' id="'.\StringUtil::standardize($this->alias).'"'
               
    $this->cssID;
    ?>
    Ein komplett alternativer Weg wäre, das Ganze auf Datenbankebene zu ändern, also überall dort den standardisierten Alias als CSS-ID zu setzen, wo keine gesetzt ist. Dabei muss man allerdings aufpassen: Das Feld cssID beinhaltet sowohl die CSS-ID als auch die -Klasse, wobei man letztere ja nicht überschreiben will, wenn sie alleine gesetzt ist.

  5. #5
    Contao-Nutzer Avatar von rory_ch
    Registriert seit
    11.05.2016.
    Ort
    Schweiz
    Beiträge
    119

    Frage

    Wir haben uns das nochmals angeschaut und ich denke es gibt noch eine schönere Lösung, ohne dass man das Template anpassen muss (falls sich das in Zukunft mal ändern soll).
    Es ist aber ein eigenes Modul dafür nötig, dann kann man es aber "sauberer" lösen:

    Im config.php:
    PHP-Code:
    $GLOBALS['TL_HOOKS']['compileArticle'][] = array('MyClass''setArticleID'); 
    Im MyClass.php:
    PHP-Code:
    public function setArticleID($objTemplate$arrData$objModule)
        {
            if (
    $objModule->cssID[0] != $objTemplate->cssID[0] && $objModule->alias != ''){
                
    $strCSSClasses $objModule->cssID[1];
                
    $objModule->cssID = array($objModule->alias$strCSSClasses);
            }
        } 
    Kurz erklärt, es checkt ob beim Artikel eine ID im CSS/ID Feld hinterlegt wurde und ob überhaupt ein Alias vorhanden ist.
    Wenn eine manuelle ID erfasst wurde, wird diese verwendet, wenn ein Alias hinterlegt wurde, wird dieser verwendet und erst dann, als Fallback wird der automatisch generierte String verwendet.

    Evtl. hilft das jemandem weiter...

  6. #6
    Contao-Nutzer Avatar von Arachnophilia
    Registriert seit
    03.01.2018.
    Beiträge
    97

    Lächelndes Gesicht

    Hallo Zusammen

    Ich werkele schon seit Wochen immer wieder daran, meine Contao v3.5.40 auf die v4.7x zu portieren. Dafür habe ich mir eine xampp Umgebung unter Windows 10 mit der aktuellesten Version aufgebaut.
    Eigentlich funktioniert soweit alles wieder unter der neuen Version.
    Nur an der Übernehme an der CSS Datei beiße ich mir momentan die Zähne aus. Wie ich schon in einem früheren Beitrag geschrieben habe, bin ich dein "Profi".
    Ich habe sehr viele Beiträge hier gelesen und versucht umzusetzen. Aber die CSS wird nicht komplett übernommen.

    Ich bin jetzt eigentlich mehr durch Zufall auf diesen Beitrag gestoßen und denke, dass diese Änderung an contao 4 bzw. dieser Hinweis wahrscheinlich genau mein Problem ist.

    Allerdings komme ich noch nicht ganz mit dieser "Lösung".

    Unter app/config habe ich eine config.php angelegt und
    PHP-Code:
    $GLOBALS['TL_HOOKS']['compileArticle'][] = array('MyClass''setArticleID'); 
    eingetragen.

    Auch den Code für eine MyClass.php habe ich übernommen und in dem Verzeichnis app/config gespeichert. Aber auch hier werden die fehlenden Formatierungen nicht angezeigt.
    Muss die "MyClass.php" wo anders gespeichert werden? Oder noch irgendwo veröffentlicht oder eingetragen werden.

    Am Besten wäre es eigentlich, wenn CSS Dateien aus der Version 3.5.x ohne diesen Aufwand einfach in Contao 4 übernommen werden könnte.

    Kann mir einer von euch helfen, mein Problem zu lösen?

    Achso... den Cache habe ich jedesmal geleert usw.
    Geändert von Arachnophilia (17.07.2019 um 20:04 Uhr)
    _____________________________________________

    Gruß Arachnophilia

  7. #7
    Community-Moderatorin & Contao-Urgestein Avatar von mlweb
    Registriert seit
    10.07.2011.
    Beiträge
    6.715
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Wenn man nicht zu viele Artikelaliase als CSS-ID im Einsatz hat, kann man die ganz simpel händisch bei der CSS-ID des Artikels eintragen.
    Ich habe Dir mit meinen Hinweisen geholfen und Du möchtest Dich bedanken?
    Unterstütze bitte das Contao-Projekt (Button Links)
    Weitere Spendenmöglichkeiten
    ------------------------------------------------------------------------------------------------------
    Contao-Dokumentation: Contao-Handbuch und Contao-Entwickler-Doku
    Contao-Online-Video-Kurse: Contao Academy
    Funktionalität erweitern: Contao-Erweiterungen

    Für Dinge die man mit html5 und css3 lösen kann, braucht man kein javascript.




  8. #8
    Contao-Nutzer Avatar von Arachnophilia
    Registriert seit
    03.01.2018.
    Beiträge
    97

    Standard

    Hallo mlweb

    Vielen Dank für deine Rückmeldung. Ich habe eine Frage zu deinem Vorschlag.

    Ich habe als Alias beispielsweise #home_neu in der CSS Datei stehen.

    Die Seite #home_neu hat als Artikel ID 182.

    In der Datenbank steht im Feld CSS ID a:2:{i:0;s:0:"";i:1;s:0:"";}

    Was tausche ich wie aus? Ich würde das gerne in der CSS Datei anpassen wenn das geht.

    Vielleicht hast du ein Beispiel? Wenn das funktioniert, betreibe ich den Aufwand gerne.
    Geändert von Arachnophilia (24.07.2019 um 18:51 Uhr) Grund: Schreibfehler finde ich "§$$&&/()=?=
    _____________________________________________

    Gruß Arachnophilia

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
  •