Ergebnis 1 bis 7 von 7

Thema: [gelöst] Filter für zeitgesteuertes Publizieren

  1. #1
    Contao-Nutzer Avatar von chrizdee
    Registriert seit
    24.08.2009.
    Ort
    Reichenschwand
    Beiträge
    73

    Standard [gelöst] Filter für zeitgesteuertes Publizieren

    In meinem Metamodel habe ich zwei Felder date_start (timestamp) und date_end (timestamp) definiert.
    Nun möchte ich die Liste im Frontend so vorfiltern, dass nur Einträge angezeigt werden, bei denen

    ENTWEDER: kein date_start und kein date_end definiert ist
    ODER: der aktuelle timestamp > date_start ist
    ODER: der aktuelle timestamp < date_end ist
    ODER: der aktuelle timestamp > date_start UND der aktuelle timestamp < date_end ist

    Meine Versuche mit einem "eigenes SQL" Filter haben leider keinen erfolg gebracht :-(

    Vielleicht hat jemand einen Tipp, wie dies zu lösen ist.

    Vielen Dank!
    Geändert von chrizdee (15.10.2013 um 09:12 Uhr)

  2. #2
    Contao-Urgestein Avatar von KlausGrenoble
    Registriert seit
    27.01.2013.
    Ort
    Grenoble
    Beiträge
    2.362

  3. #3
    Contao-Nutzer Avatar von chrizdee
    Registriert seit
    24.08.2009.
    Ort
    Reichenschwand
    Beiträge
    73

    Standard

    Hallo Klaus,

    erstmal vielen herzlichen Dank für die schnelle Antwort! Ich muss mir das heute mal in Ruhe anschauen, wenn ich wieder vom Computer sitz. Auf den ersten Blick steig ich da noch nicht so recht durch :-)

  4. #4
    Contao-Urgestein
    Registriert seit
    07.07.2009.
    Beiträge
    4.107

    Standard

    Wenn du immer noch nicht durchsteigst meld dich hier. Hab das letztens umgesetzt und kann dir dann kurz erläutern wie es geht.

  5. #5
    Contao-Nutzer Avatar von chrizdee
    Registriert seit
    24.08.2009.
    Ort
    Reichenschwand
    Beiträge
    73

    Standard

    Hi!

    Ich habe mir die Abfragen angeschaut und versucht diese in mein MetaModel zu integrieren. Leider nur mit mässigem Erfolg :-(

    So sehen die Filter nun aus:
    Bildschirmfoto 2013-10-14 um 13.27.43.png

    Definierte SQL-Queries:

    1. SELECT id FROM mm_rs_article WHERE NOW() > FROM_UNIXTIME(date_start) AND NOW() < FROM_UNIXTIME(date_end)
    2. SELECT id FROM mm_rs_article WHERE NOW() < FROM_UNIXTIME(date_end)
    3. SELECT id FROM mm_rs_article WHERE NOW() > FROM_UNIXTIME(date_start)
    4. SELECT id FROM mm_rs_article WHERE date_start > date_end
    5. SELECT id FROM mm_rs_article WHERE date_start IS NULL AND date_end IS NULL
    6. SELECT id FROM mm_rs_article WHERE date_start IS NULL


    Ich habe der Reihe nach die Queries aktiviert. Query Nr. 1-3 funktioniert und es werden nur noch die Einträge anzeigt, bei denen date_start und date_end gesetzt und im entsprechenden Zeitraum sind.

    Sobald Query Nr. 4, 5 oder 6 aktiv sind, werden überhaupt keine Einträge mehr angezeigt :-(


    Hier mal die Debug-Ausgabe zu den Filtern:

    Code:
    [26] => Array
            (
                [0] => SELECT id FROM mm_rs_article WHERE NOW() > FROM_UNIXTIME(date_start) AND NOW() < FROM_UNIXTIME(date_end)
                [1] => 1 rows returned
                [2] => Array
                    (
                        [id] => 1
                        [select_type] => SIMPLE
                        [table] => mm_rs_article
                        [type] => ALL
                        [possible_keys] => 
                        [key] => 
                        [key_len] => 
                        [ref] => 
                        [rows] => 7
                        [Extra] => Using where
                    )
    
            )
    
        [27] => Array
            (
                [0] => SELECT id FROM mm_rs_article WHERE NOW() < FROM_UNIXTIME(date_end)
                [1] => 2 rows returned
                [2] => Array
                    (
                        [id] => 1
                        [select_type] => SIMPLE
                        [table] => mm_rs_article
                        [type] => ALL
                        [possible_keys] => 
                        [key] => 
                        [key_len] => 
                        [ref] => 
                        [rows] => 7
                        [Extra] => Using where
                    )
    
            )
    
        [28] => Array
            (
                [0] => SELECT id FROM mm_rs_article WHERE NOW() > FROM_UNIXTIME(date_start)
                [1] => 1 rows returned
                [2] => Array
                    (
                        [id] => 1
                        [select_type] => SIMPLE
                        [table] => mm_rs_article
                        [type] => ALL
                        [possible_keys] => 
                        [key] => 
                        [key_len] => 
                        [ref] => 
                        [rows] => 7
                        [Extra] => Using where
                    )
    
            )
    
        [29] => Array
            (
                [0] => SELECT id FROM mm_rs_article WHERE date_start > date_end
                [1] => 0 rows returned
                [2] => Array
                    (
                        [id] => 1
                        [select_type] => SIMPLE
                        [table] => mm_rs_article
                        [type] => ALL
                        [possible_keys] => 
                        [key] => 
                        [key_len] => 
                        [ref] => 
                        [rows] => 7
                        [Extra] => Using where
                    )
    
            )

    Muss man die einzelnen Abfragen mit UND-Bedingungen bzw. ODER-Bedingungen kombinieren?

  6. #6
    Contao-Urgestein Avatar von KlausGrenoble
    Registriert seit
    27.01.2013.
    Ort
    Grenoble
    Beiträge
    2.362

    Standard

    Die einzelnen SELECTs zeigen nur Einträge an, die unzulässig sind. Du willst die ja aber ausfiltern, also nicht anzeigen.
    Dazu benötigst Du nur einen einzigen SELECT, der nur anzeigt, was zulässig ist.
    http://contao.klausgraf.fr/metamodel...d-entries.html
    SELECT id FROM mm_timestampsfilter where date_start IS NOT NULL
    AND date_end is not null
    AND date_end >= date_start
    AND NOW() > FROM_UNIXTIME(date_start)
    AND NOW() < FROM_UNIXTIME(date_end)

    Deinen "Wert von/bis" benötigst Du meines Erachtens nicht.
    Gruß Klaus

  7. #7
    Contao-Nutzer Avatar von chrizdee
    Registriert seit
    24.08.2009.
    Ort
    Reichenschwand
    Beiträge
    73

    Standard

    Puh - schwere Geburt, aber nun funktioniert es!

    Vielen herzlichen Dank und das Bier bekommst Du auf der Contao-Konferenz 2014! ;-)

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
  •