Ankündigung

Einklappen
Keine Ankündigung bisher.

CC Filter: Nach Jahren filtern

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

  • CC Filter: Nach Jahren filtern

    Hallo Forum,

    ich habe Produkte, für die ein Redakteur einen Datumswert in die Datenbank schreibt (Ablaufdatum einer Gültigkeit, aber ich denke das ist hier nicht wichtig). In der Tabelle steht dann der Unixtimestamp.

    In der Anzeige der Produkte möchte ich nun einen Filter haben, der mir eine Filterung dieses Feldes nach Jahren ermöglich. Also ich will z.B. wissen, welche Produkte sind seit 2013 nicht mehr gültig.

    Ich habe es mit einem Datumfilter versucht, aber ich komme damit nicht zurecht. Im Frontend bekomme ich mit dem defaulttemplate für den Datepicker ein Listenfeld angeboten. Darin sehe ich dann zwar die Datumsangaben aus der Tabelle, könnte sie auswählen und die Filterung funktioniert dann auch aber ich will ja eigentlich den Datepicker haben.
    Habt ihr eine Idee was die Anzeige/Nutzung verhindern könnte? jQuery sollte nicht das Problem sein. Ich habe auch noch einen Range Filter auf einer anderen Seite und der funktioniert wunderbar soweit.

    Gibt es in der Onlinedemo evtl, ein Funktionsbeispiel? Habe auf die Schnelle keines gefunden.
    Danke Euch!

  • #2
    Kannst das "customcatalog_filter_datepicker.html5" Template nutzen. Ist immer mit an Bord. Dann haste nen datepicker im FE.

    Ich persönlich fände für den User ja ein Select ganz geil, wo man die gewünschte Jahreszahl direkt auswählt.
    Klar, müsste man bissel im Template umbauen und anstelle der timestamps im Label, schnell php beauftragen ne Jahreszahl draus zu machen

    $this->parseDate('Y', $myTimestamp)
    http://www.premium-contao-themes.com

    Kommentar


    • #3
      Ich wollte auch eigentlich ein reines Listenfeld haben und nur die Jahre anbieten (natürlich auch nur 1x ...) für die es auch Einträge in der DB gibt. Finde ich auch am sinnvollsten für die späteren Benutzer. Ich habe es nur nicht hinbekommen :-(.

      Welchen Filtertyp könnte ich denn nehmen? Wenn ich den Select nehme, dann habe ich doch alle Datumsangeben in der Auswahlliste. (Den Timestamp zum lesbaren Datum umformatieren ist kein Problem).
      Also wenn Du da noch einen kleinen Tipp zum Wochenende hast ... Danke ;-)


      Das mit dem Datepicker löst sich gerade ... Nach einer kleinen Runde joggen ist der Kopf wieder frei und entdeckt, dass der Datepicker sich mit seiner Section außerhalb platziert hat und mein bereits durch die anderen Filter umgebogenes CSS den nicht mehr zur Anzeige bringen kann. Also, falls das mal jemand sucht, es ist da. Nach der id "ui-datepicker-div" im grundsätzlichen Seitenaufbau suchen und dann CSS entsprechend überprüfen/anpassen.

      Kommentar


      • #4
        Also noch mal zur Verdeutlichung des Problems mit dem Dropdown. Der einfache Selectfilter mit dem entsprechenden Select-Template, liefert mir eine Liste mit allen Timestamps die in der Tabelle vorkommen. Den Timestamp kann ich umformatieren zu Anzeige als volles Jahr (z.B. 2015). Dann habe ich aber u.U. einige Jahre mehrfach in der Auswahlliste. Ich bräuchte sowas wie ein DISTINCT auf die Ausgabe, habe aber keinen Weg gefunden, dies irgendwo anzubringen.
        Bestimmt denke ich wieder zu kompliziert ;-)
        DANKE!

        Kommentar


        • #5
          Wie wäre es mit einem array_unique oder einfach in einem temp. array werte schreiben und in der foreach prüfen, dass dieser timestamp noch nicht abgearbeitet wurde. Ich nenn sowas eine Prüfungsarray oder Ignore-Array.
          Den options Array musst du eh bearbeiten. Dann legt man einfach den jeweiligen Wert in dem Prüfungsarray ab und beim nächsten durchlauf prüft man ob:

          if(in_array($myValue, $myIgnoreArray)) {continue;}
          Zuletzt geändert von Tim; 07.03.2016, 08:48.
          http://www.premium-contao-themes.com

          Kommentar


          • #6
            Danke Dir, Tim. Aber ich bin irgendwie noch nicht im Boot. Ich verstehe Dich doch richtig, dass Du das davon ausgehst, den Select-Filter zu nutzen und das Template customcatalog_filter_select.html5 entsprechend verändert wird (siehe oben), so dass nachher nur die Jahreszahl zu den Werten in der Auswahlliste steht und dann jeweils auch nur 1x - oder?

            Ist das überhaupt der richtige Weg? Der Selectfilter wird mir dann doch am Ende trotzdem nur 1 Datensatz ausgeben - oder ein paar mehr wenn ich noch andere Jahre auswähle aber eben nur 1 Datensatz pro Jahr. Oder?
            Und außerdem möchte ich ja mit größer oder kleiner arbeiten. Also zeige Produkte, deren Gültigkeit in 2015 oder älter abgelaufen sind. Das umfasst ja mehrere Jahre. Der Selectfilter bietet keine solchen Operatoren an und ich kann nicht sehen, wie ich die ggf. hinzufügen kann?
            Übersehe ich etwas?

            Ich komme dann irgendwie doch wieder auf den Datumsfilter zurück, der mir diesen Operator anbietet und der im Prinzip ja auch gut funktioniert. Es ist nur unschön, dem Benutzer den kompletten Kalender anzubieten, wenn er doch eigentlich nur ein Startjahr auswählen will. Also habe ich versucht den Datepicker im Template damit zu reduzieren:

            PHP-Code:
            <script type="text/javascript">

            jQuery(document).ready(function() {
                jQuery('#filter_timestamp_<?php echo $this->id?>').datepicker({
                    changeYear: true,
                    showButtonPanel: true,
                    dateFormat: 'yy-mm-dd',
                    onClose: function(dateText, inst) {
                        var year = jQuery("#ui-datepicker-div .ui-datepicker-year :selected").val();
                        jQuery(this).datepicker('setDate', new Date(year, 1));
                    }
                });
             jQuery("#filter_timestamp_<?php echo $this->id?>").focus(function () {
                    jQuery(".ui-datepicker-month").hide();
                });
            });

            </script>
            Das funktioniert sogar fast.

            Ich habe die Tagesanzeige mit
            PHP-Code:
            .ui-datepicker-calendar {displaynone;} 
            ausgeblendet und ich bekomme dann im Datepicker nur noch ein Listenfeld für die Jahre und kann das dort auswählen. Leider funktioniert der angepasste jQuery Code noch nicht richtig. Das ausgewählte Jahr wird nach Klick auf "Done" (des Datepickers), zwar in das Inputfeld übernommen, aber irgendwie nicht ausgeführt. Sieht man auch gut in der URL, die sich nicht verändert. Müsste sie ja aber eigentlich. Erst wenn ich den Kalender doch wieder einblende und auf einen beliebigen Tag klicke, wird das Inputfeld "übergeben" und die Abfrage korrekt ausgeführt und mir werden die richtigen Ergebnisse angezeigt.
            Also eigentlich schon fast gut ... wenn ich nur wüsste warum der Wert zwar in das inputfeld eingetragen aber nicht ausgeführt wird.

            Kannst Du sehen wo ich noch auf dem Holzweg bin?

            Kommentar


            • #7
              Nagut, hier kommen ja immer mal neue Info Brocken hinzu. Plötzlich soll der Filter alles zeigen > dem gewählten Jahr. Das wäre out of the box nur mit dem Wertebereich Filter möglich.


              http://www.premium-contao-themes.com

              Kommentar


              • #8
                Nee, kein Zusatzbrocken, das war die Grundforderung und steht gleich oben im zweiten Satz ;-).

                Wertebereich-Filter hatte ich auch zuerst gedacht aber der ermöglicht mir nicht das timestamp Feld zur Auswahl ... Ich muss also einen anderen Typ nehmen.
                Ich denke das ist auch soweit ok mit dem Datepicker. Den kann ich mit CSS hübsch machen und ich muss dann nur noch sehen, dass das Datum, welches er in das Inputfeld packt, immer 31.12. des ausgewählten Jahres ist und dann sollte es gehen.

                Aber wie kriege ich das hin, dass der Wert dann auch genutzt wird? Das, was passiert, wenn man sonst einen Tag im calender auswählt?

                Danke!

                Kommentar


                • #9
                  Erstelle dir einen eigenen Filter mit dem du machen kannst, was du willst.

                  Wenn es mit den Bordmitteln und Template-Anpassungen nicht geht. Dann geht es mit einem eigenen Filter oder mit dem Hook Filter "Callback Funktion".
                  http://www.premium-contao-themes.com

                  Kommentar


                  • #10
                    Phew, wenn ich das könnte, hätte ich vermutlich nicht so "einfache" Fragen wie oben gestellt ... ;-)

                    Ich schau dann mal ob ich das irgendwie gegoogled bekomme und werde berichten

                    Kommentar


                    • #11
                      Für alle:

                      dcaconfig.php
                      Code:
                      $GLOBALS['TL_DCA']['tl_pct_customelement_filter']['fields']['attr_id']['options_values'][] = 'timestamp';
                      Erlaubt die Auswahl von Zeitstempel Attributen auch im Range (Wertebereich) Filter.
                      http://www.premium-contao-themes.com

                      Kommentar


                      • #12
                        Danke für die schnelle Aufnahme des Feature -Requests ;-). Ich glaube es wäre für viele von uns auch hilfreich, wenn Datumsauswahlen schon bei der Filterdefinition etwas erleichtert werden könnten (Formatangaben). Feintuning kann dann ja noch über das Template erfolgen.

                        Ich habe das obige Problem übrigens jetzt ganz anders gelöst. Ich habe direkt in der Datenbank einen Trigger gesetzt, der mir neben dem Feld mit dem exakten Timestamp (den ich wegen Sortierung brauche) sofort beim anlegen/aktualisieren daraus den Jahreswert in ein anderes Feld schreibt.
                        Diesen kann ich dann ohne weiteres Gehampel mit einem ganzzahligen Wertebereichsfilter abgreifen und es funktioniert sofort wie es soll.

                        Danke für die hilfreiche Diskussion der Möglichkeiten!

                        Kommentar

                        Lädt...
                        X