Community
    • Categories
    • Recent
    • Popular
    • Users
    • Search
    • Register
    • Login

    Datumsfeld automatisch ausfüllen

    Scheduled Pinned Locked Moved Allgemein
    11 Posts 2 Posters 547 Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • LFischerL Offline
      LFischer @db7
      last edited by

      Hey @db7

      ich fürchte ohne eigenen Code wird das aktuell nicht möglich sein. Mit "eigenem Code" meine ich eine Add-on ähnliche Struktur die sich an die benutzerdefinierte Kategorie hängt und einen Wert einträgt, falls keiner gesetzt ist. Ich schätze das klingt jetzt etwas komplizierter als es ist 😉

      Du musst aber dabei auch bedenken das hierbei IMMER das aktuelle Datum geschrieben wird, wenn das Feld leer ist (also auch wenn ein existierender Kategorie-Eintrag bearbeitet wird).

      Benötigst du hier ggf. mehr Informationen?

      VG Leo

      D 1 Reply Last reply Reply Quote 0
      • D Offline
        db7 @LFischer
        last edited by

        @lfischer
        Hi Leo,

        wenn Du mir weitere Infos geben kannst wie ich so ein "kleines" Add-on selbst schreiben kann, wäre das klasse.

        Grüße Detlev

        LFischerL 1 Reply Last reply Reply Quote 0
        • LFischerL Offline
          LFischer @db7
          last edited by

          Hey @db7

          im Grunde benötigst du nur einen eigenen Ordner unterhalb von <i-doit>/src/classes/modules/, also z.B. <i-doit>/src/classes/modules/mycompany_custom_field_helper. Dort hinterlegst du eine Datei init.php die folgendes beinhaltet:

          $app = isys_application::instance();
          $addOnPath = $app->www_path . 'src/classes/modules/mycompany_custom_field_helper/';
          
          $app->container->get('template')->appendJavascript($addOnPath . 'register.js');
          

          Du legst anschließend die Javascript Datei register.js im gleichen Verzeichnis ab und tust dadrin folgendes:

          const calendarField = 'ID des Kalenderfelds';
          const $field = $(calendarField);
          
          // Wir prüfen zunächst ob das Feld existiert und dessen Wert "leer" ist.
          if ($field && $field.getValue().blank()) {
              const currentDate = new Date();
              const dateString = currentDate.getDate() + '.' + (currentDate.getMonth() + 1) + '.' + currentDate.getFullYear();
          
              $field.setValue(dateString).simulate('change');
          }
          

          Die ID des Kalenderfelds findest du in der Konfiguration der benutzerdefinierten Kategorie, wenn du dir die "technischen Informationen" ansiehst. Dort siehst du einen Namen wie z.B. c_1624865299039.

          Dieser muss um C__CATG__CUSTOM__ und __VIEW ergänzt werden, sodass die ID etwa so aussieht: C__CATG__CUSTOM__c_1624865299039__VIEW.

          Ich denke das sollte es sein 🤔 Die appendJavascript Methode wird deine Javascript Datei einbinden und diese wird wiederum versuchen das Datumsfeld zu finden und mit dem aktuellen Datum zu befüllen (wenn es leer ist).

          Sag bescheid ob es geklappt hat 🙂

          VG Leo

          D 1 Reply Last reply Reply Quote 0
          • D Offline
            db7 @LFischer
            last edited by

            Hi @lfischer

            ich habe es nach Deinem Vorschlag umgesetzt.
            Leider funktioniert es nicht.
            Sobald ich die Files in das Verzeichnis lege, ist die Formatierung von i-doit kaputt.
            Neben dem i-doit-Logo wird ein Teil der init.php ausgegeben

            2ecdbeb7-0a04-44fe-b4a7-8d8dbbf4d0cb-grafik.png

            Hast Du eine Idee, woran es liegen kann

            Grüße Detlev

            D 1 Reply Last reply Reply Quote 0
            • D Offline
              db7 @db7
              last edited by

              @db7
              den Formatierungsfehler habe ich nun beheben können:

              <?php
              

              am Anfang von der Datei init.php löste das Porbelm. Das hätte mir auch früher auffallen können 😊

              LFischerL 1 Reply Last reply Reply Quote 0
              • LFischerL Offline
                LFischer @db7
                last edited by

                Hey @db7

                whoops, ja, aber ich hatte es in meinem Beispiel auch vergessen 😉 Klappt es denn mit dem Snippet?

                D 1 Reply Last reply Reply Quote 0
                • D Offline
                  db7 @LFischer
                  last edited by

                  Hi @lfischer

                  nein leider nicht, die ID des Kalenderfelds ist richtig das konnte ich im Firefox-Debugger überprüfen, die register.js wird ebenfalls geladen, so der Debugger.

                  Hast Du noch eine Idee?

                  Grüße Detlev

                  LFischerL 1 Reply Last reply Reply Quote 0
                  • LFischerL Offline
                    LFischer @db7
                    last edited by

                    Hey @db7

                    also es ist möglich dass das Skript geladen wird bevor die Seite geladen ist - und zu diesem Zeitpunkt existiert das Formularfeld noch nicht. Da könnte man das Skript folgendermaßen erweitern:

                    document.observe('dom:loaded', function () {
                        const calendarField = 'ID des Kalenderfelds';
                        const $field = $(calendarField);
                        
                        // Wir prüfen zunächst ob das Feld existiert und dessen Wert "leer" ist.
                        if ($field && $field.getValue().blank()) {
                            const currentDate = new Date();
                            const dateString = currentDate.getDate() + '.' + (currentDate.getMonth() + 1) + '.' + currentDate.getFullYear();
                            
                            $field.setValue(dateString).simulate('change');
                        }
                    });
                    

                    Dadurch wird das Skript erst ausgeführt wenn die Seite vollständig geladen wurde. Hilft das?

                    Viele Grüße
                    Leo

                    1 Reply Last reply Reply Quote 0
                    • LFischerL Offline
                      LFischer
                      last edited by

                      Hey @db7

                      mir ist noch eine ganz doofe Sache eingefallen... Es handelt sich um eine benutzerdefinierte Kategorie, richtig?

                      In benutzerdefinierten Kategorien gibt es den Feldtypen "Javascript" - dort kann man eigenes Javascript eintragen welches in der Kategorie ausgeführt werden soll. Heißt der Umweg über das "Add-on" bzw. die ausgelagerte Javascript Datei war gar nicht notwendig.

                      Dieser Weg wäre eher nötig gewesen wenn man diese Logik "global" ausrollen möchte... Das hatte ich total vergessen 😉

                      Viele Grüße
                      Leo

                      D 1 Reply Last reply Reply Quote 0
                      • D Offline
                        db7 @LFischer
                        last edited by

                        Hi @lfischer

                        danke für den Tipp. Bin gerade mit 1000 anderen Dingen beschäftiggt, und dann noch ab Freitag Urlaub ... 🙂
                        Ich schaue es mir dann Ende des Monats an.

                        Bis dann
                        Detlev.

                        1 Reply Last reply Reply Quote 0
                        • First post
                          Last post