Contao-Camp 2024
Ergebnis 1 bis 17 von 17

Thema: News-Datum in URL/Alias (bspw. YYYY/MM/newsbeitrag-alias.html)

  1. #1
    Contao-Nutzer
    Registriert seit
    25.06.2009.
    Beiträge
    119

    Standard News-Datum in URL/Alias (bspw. YYYY/MM/newsbeitrag-alias.html)

    Hi,

    gibt es eine Möglichkeit, eine Art Permalink-Struktur wie in WordPress für News anzulegen?

    Es wäre extrem nützlich, wenn man News im Format

    Code:
    http://www.example.org/news/2011/09/mein-tolles-alias.html
    veröffentlichen könnte. FolderURL und urlcleaner sind übrigens installiert.

    (Das Thema „item“ hab ich schon gelöst )

    Plugin? Core-Hack? Wäre mir vorerst egal, da das System eh noch im Dev-Modus ist und auch prinzipiell von mir verwaltet wird.
    Geändert von datenkind (30.09.2011 um 09:53 Uhr)

  2. #2
    Contao-Urgestein Avatar von Toflar
    Registriert seit
    15.06.2009.
    Beiträge
    4.467
    Partner-ID
    8667
    User beschenken
    Wunschliste

    Standard

    Das ginge mit dem onsubmit_callback

    Dann könntest Du per Code einfach das eingegebene Datum auslesen und halt das Alias dementsprechend generieren.
    Dafür müsste aber eben folderurl oder so installiert sein, weil ein Alias per default keine "/" erlaubt
    Contao Core-Entwickler @terminal42 gmbh
    Wir sind Contao Premium-Partner!
    Für Individuallösungen kannst du uns gerne kontaktieren.
    PS: Heute schon getrakked?

  3. #3
    Contao-Nutzer
    Registriert seit
    25.06.2009.
    Beiträge
    119

    Standard

    Jap, folderurl ist installiert.

    Ich schau mal, ob ich’s hinbekomme.

  4. #4
    Contao-Nutzer
    Registriert seit
    25.06.2009.
    Beiträge
    119

    Standard

    Also ich bekomms nicht hin. Prinzipiell ist mir ja klar, was eigentlich passieren soll, aber mir fehlen die PHP-Kenntnisse dafür.

    Mein Ansatz war sowas in der Art:

    dcaconfig.php

    Code:
    $GLOBALS['TL_DCA']['tl_news']['fields']['alias']['onsubmit_callback'] => array(array('tl_news', 'generateAliasWithDate'));
    Dann die Funktion generateAlias() aus der modules/news/dca/tl_news.php umbauen. In die DB-Abfrage date ausgeben lassen und eben in YYYY/MM/alias umwandeln …

    narf …

  5. #5
    Contao-Urgestein Avatar von Toflar
    Registriert seit
    15.06.2009.
    Beiträge
    4.467
    Partner-ID
    8667
    User beschenken
    Wunschliste

    Standard

    PHP-Code:
    //system/modules/z_mygreatmodule/dca/tl_news.php
    $GLOBALS['TL_DCA']['tl_news']['config']['onsubmit_callback'][] = array('tl_mygreatmodule_news''generateMyGreatAlias');

    class 
    tl_mygreatmodule_news extends Backend
    {
        public function 
    generateMyGreatAlias(DataContainer $dc)
        {
            if(!
    $dc->activeRecord)
                 return;

            
    $strAlias standardize($dc->activeRecord->alias);

            
    // hier dafür sorgen, dass es das richtige Format ist
            
    $strYear $this->parseDate('Y'$dc->activeRecord->date);
            
    $strMonth $this->parseDate('m'$dc->activeRecord->date);

            
    $strNewAlias sprintf('%s/%s/%s'$strYear$strMonth$strAlias);

            
    $this->Database->prepare('UPDATE tl_news SET alias=? WHERE id=?')->execute($strNewAlias$dc->id);
        }

    Ungetestet und einfach hingetippt - aber sollte das Prinzip veranschaulichen
    Geändert von Toflar (06.10.2011 um 13:58 Uhr)
    Contao Core-Entwickler @terminal42 gmbh
    Wir sind Contao Premium-Partner!
    Für Individuallösungen kannst du uns gerne kontaktieren.
    PS: Heute schon getrakked?

  6. #6
    Contao-Nutzer
    Registriert seit
    25.06.2009.
    Beiträge
    119

    Standard

    Wow, Yannick. Das sieht gut aus und ergibt durchaus Sinn, allerdings greift der callback nicht. Es kommt immer das Standardalias raus.

    Wenn man eine Struktur wie gewünscht eingibt (Input-Validierung muss im News-Modul rausgeworfen werden) kommt man eh noch zusätzlich auf eine Contao-eigene 404-Seite. Mist.

    Bin dennoch begeistert, dass du das einfach mal hintippst.
    Geändert von datenkind (06.10.2011 um 13:14 Uhr)

  7. #7
    Contao-Urgestein Avatar von Toflar
    Registriert seit
    15.06.2009.
    Beiträge
    4.467
    Partner-ID
    8667
    User beschenken
    Wunschliste

    Standard

    Wird denn der Code auch korrekt ausgeführt?

    Ansonsten joine einfach mal #contao.de auf irc.freenode.net, dann kann man das bisschen genauer angucken
    Contao Core-Entwickler @terminal42 gmbh
    Wir sind Contao Premium-Partner!
    Für Individuallösungen kannst du uns gerne kontaktieren.
    PS: Heute schon getrakked?

  8. #8
    Contao-Nutzer
    Registriert seit
    25.06.2009.
    Beiträge
    119

    Standard

    Der Toflar hat’s schon drauf. Der Code ist 100%. Der Fehler steckt aber im Detail. Die Extension wird aufrgrund des Names zu früh ausgeführt – also einfach ein z_ davor und gut ist.

  9. #9
    Contao-Urgestein Avatar von Toflar
    Registriert seit
    15.06.2009.
    Beiträge
    4.467
    Partner-ID
    8667
    User beschenken
    Wunschliste

    Standard

    Hab's aktualisiert für die Nachwelt
    Contao Core-Entwickler @terminal42 gmbh
    Wir sind Contao Premium-Partner!
    Für Individuallösungen kannst du uns gerne kontaktieren.
    PS: Heute schon getrakked?

  10. #10
    Contao-Nutzer
    Registriert seit
    13.06.2010.
    Beiträge
    4

    Standard

    Guten Tag, Toflar!
    Alles sieht gut aus, aber wo muss ich PHP-Code eintippen? In dcaconfig.php oder in einem Extra-Modul oder was? Könnten Sie erklären?
    Vielen Dank im voraus.
    Oleg.

  11. #11
    Contao-Urgestein Avatar von Toflar
    Registriert seit
    15.06.2009.
    Beiträge
    4.467
    Partner-ID
    8667
    User beschenken
    Wunschliste

    Standard

    Hi Oleg :-)

    Ich bin Yanick und wir sagen uns alle Du ;-)

    Im Code Snippet oben hat's einen Kommentar:
    /system/modules/z_mygreatmodule/dca/tl_news.php
    Contao Core-Entwickler @terminal42 gmbh
    Wir sind Contao Premium-Partner!
    Für Individuallösungen kannst du uns gerne kontaktieren.
    PS: Heute schon getrakked?

  12. #12
    Contao-Nutzer
    Registriert seit
    13.06.2010.
    Beiträge
    4

    Beitrag

    Leider "Page not found".
    Muss alles nur im File "/system/modules/z_mygreatmodule/dca/tl_news.php" stehen oder wird auch dcaconfig.php irgendwie benutzt?
    Geändert von o.markov (25.05.2012 um 18:33 Uhr)

  13. #13
    Contao-Nutzer
    Registriert seit
    13.06.2010.
    Beiträge
    4

    Standard

    Hallo!
    Leute, mir fehlen leider die PHP-Kenntnisse.
    Könnten sie mir doch bitte genau erklären, wie ich diese Möglichkeit realisiere?
    Muss ich ein Extra-Modul "z_mygreatmodule" erstellen? Oder alles in "dcaconfig.php" eintippen?
    Geändert von o.markov (29.05.2012 um 12:21 Uhr)

  14. #14
    Contao-Nutzer
    Registriert seit
    13.06.2010.
    Beiträge
    4

    Standard

    Hi, Leute!
    Ich kann leider dieses Problem allein nicht lösen. Kapiere etwas nicht.
    Kann mir jemand helfen?

  15. #15
    Contao-Nutzer
    Registriert seit
    15.10.2009.
    Ort
    Dresden
    Beiträge
    109

    Standard

    Die URLs funktionieren dann aber nicht mehr mit dem Nachrichtenleser. Der gibt die Fehlermeldung: Der Eintrag "2012" existiert leider nicht.

    Vermutlich muss da das URL Rewriting noch angepasst werden, oder?

  16. #16
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.713
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von x-ray Beitrag anzeigen
    Vermutlich muss da das URL Rewriting noch angepasst werden, oder?
    sehe ich auch so - Contao kann das /2012/... nicht auflösen... einfacher wird sicher sein

    PHP-Code:
    //system/modules/z_mygreatmodule/dca/tl_news.php
    $GLOBALS['TL_DCA']['tl_news']['config']['onsubmit_callback'][] = array('tl_mygreatmodule_news''generateMyGreatAlias');

    class 
    tl_mygreatmodule_news extends Backend
    {
        public function 
    generateMyGreatAlias(DataContainer $dc)
        {
            if(!
    $dc->activeRecord)
                 return;

            
    $strAlias standardize($dc->activeRecord->alias);

            
    // hier dafür sorgen, dass es das richtige Format ist
            
    $strYear $this->parseDate('Y'$dc->activeRecord->date);
            
    $strMonth $this->parseDate('m'$dc->activeRecord->date);

            
    //$strNewAlias = sprintf('%s/%s/%s', $strYear, $strMonth, $strAlias);
            
    $strNewAlias sprintf('%s-%s-%s'$strYear$strMonth$strAlias);

            
    $this->Database->prepare('UPDATE tl_news SET alias=? WHERE id=?')->execute($strNewAlias$dc->id);
        }

    das so zu generieren

  17. #17
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.713
    User beschenken
    Wunschliste

    Standard

    damit das nicht bei jedem Speichervorgang angefügt wird...

    PHP-Code:
    <?php

    $GLOBALS
    ['TL_DCA']['tl_news']['config']['onsubmit_callback'][] = array('tl_news_genarateAlias''generateAlias');

    class 
    tl_news_genarateAlias extends Backend
    {
        public function 
    generateAlias(DataContainer $dc)
        {
            if(!
    $dc->activeRecord) {
                 return;
            }

            
    $strAlias standardize($dc->activeRecord->alias);

            list(
    $prefix,$year,$month) = explode('-',$strAlias);

            if (
    strtotime($year.'/'.$month.'/1')) {
                return;
            }

            
    // hier dafür sorgen, dass es das richtige Format ist
            
    $strYear $this->parseDate('Y'$dc->activeRecord->date);
            
    $strMonth $this->parseDate('m'$dc->activeRecord->date);

            
    $strNewAlias sprintf('news-%s-%s-%s'$strYear$strMonth$strAlias);

            
    $this->Database->prepare('UPDATE tl_news SET alias=? WHERE id=?')->execute($strNewAlias$dc->id);
        }
    }
    vorab ggf. alle bestehenden ändern...

    [SQL]
    UPDATE tl_news SET
    alias = CONCAT(FROM_UNIXTIME(date, 'news-%Y-%m-'), alias)
    [/SQL]

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
  •