SQL von DCA-Feldern überschreiben

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • The_Unknown
    Contao-Nutzer
    • 29.01.2013
    • 157

    #1

    SQL von DCA-Feldern überschreiben

    Hallo,

    ich würde gern "description" von Nachrichten so überschreiben, dass es eine Textarea mit tinyMCE ist. Leider ist das Feld aktuell als varchar(255) angelegt. Ich wollte daher im DCA sql auf "TEXT null" setzen, aber das wird leider ignoriert. Wenn ich Datenbank aktualisieren klicke, steht da, sie wäre aktuell.

    Wo überschreibe ich so etwas? In den database.sql-Dateien habe ich auch nichts gefunden.

    Ciao The_Unknown
  • Spooky
    Community-Moderator
    Wandelndes Contao-Lexikon
    • 12.04.2012
    • 38811

    #2
    Beschreibe mal genau was du überhaupt gemacht hast, sollte eigentlich funktionieren.
    » sponsor me via GitHub or Revolut

    Kommentar

    • The_Unknown
      Contao-Nutzer
      • 29.01.2013
      • 157

      #3
      orm_avisota_message.php in xmodule (wird also am Schluss geladen):

      PHP-Code:
      <?php
      
      $dca = &$GLOBALS['TL_DCA']['orm_avisota_message'];
      
      /**
       * Fields
       */
      unset($dca['fields']['description']['eval']['maxlength']);
      unset($dca['fields']['description']['eval']['rows']);
      $dca['fields']['description']['eval']['rte'] = 'tinyMCE';
      $dca['fields']['description']['sql'] = "text NULL";

      Kommentar

      • Spooky
        Community-Moderator
        Wandelndes Contao-Lexikon
        • 12.04.2012
        • 38811

        #4
        Ich weiß leider nicht was orm_avisota_message.php und xmodule sein soll, aber solche Sachen gehören normalerweise in eine eigene Extension oder einfach in die system/config/dcaconfig.php
        » sponsor me via GitHub or Revolut

        Kommentar

        • The_Unknown
          Contao-Nutzer
          • 29.01.2013
          • 157

          #5
          Zitat von Spooky Beitrag anzeigen
          Ich weiß leider nicht was orm_avisota_message.php und xmodule sein soll, aber solche Sachen gehören normalerweise in eine eigene Extension oder einfach in die system/config/dcaconfig.php
          xmodule ist die Extension (der Name ist natürlich nur ein Beispiel gewesen) und orm_avisota_message.php die Datei, die normalerweise in einer Extension unter dca liegt, bspw. tl_module.php.

          dcaconfig.php nehme ich nicht, weil die sonst irgendwann 3 MB groß wäre und so Wiederverwendung beim nächsten Projekt mit immensem Aufwand verbunden wäre.

          Kommentar

          • Spooky
            Community-Moderator
            Wandelndes Contao-Lexikon
            • 12.04.2012
            • 38811

            #6
            Vielleicht fehlt dir einfach nur der autoload.ini Eintrag. Aufgrund des Verzeichnisnamens der Extension kannst du dich nicht (mehr) verlassen, dass deine Extension nach Avisota geladen wird. Du musst das als Abhängigkeit in der autoload.ini festlegen.
            » sponsor me via GitHub or Revolut

            Kommentar

            • The_Unknown
              Contao-Nutzer
              • 29.01.2013
              • 157

              #7
              Stimmt, das hätte sein können, aber auch ein Hinzufügen von

              requires[] = "avisota-message"

              bringt nix Avisota scheint die Datenbankeinträge irgendwie anders zu definieren. Evtl. hat es etwas mit Doctrine zu tun?

              Kommentar

              • tril
                Contao-Urgestein
                • 07.01.2010
                • 2939

                #8
                PHP-Code:
                $dca['fields']['description']['sql'] = "text NULL"; 
                
                Das wird vollständig ignoriert. Theoretisch kannst du zwar den Typ festlegen, aber praktisch solltest du das aber gar nicht weil das automatisch erkannt wird.
                Für eine Tiny Textarea fehlt dir aber ein wichtiges Detail:
                PHP-Code:
                $dca['fields']['description']['inputType'] = 'textarea'; 
                
                Anschließend sollte dir das DB Update ein Update des Feldes automatisch anbieten.

                Kommentar

                • Tastaturberuf
                  Contao-Nutzer
                  • 14.03.2011
                  • 199

                  #9
                  Geht die automatische Datenbank Aktualisierung über DCA nicht nur wenn die Tabellen mit tl_ beginnen?
                  Tastaturberuf | Code with ♥ and Contao.

                  Kommentar

                  • tril
                    Contao-Urgestein
                    • 07.01.2010
                    • 2939

                    #10
                    @Cord die Doctrine Erweiterung injected ihre SQL Queries über die entsprechenden Hooks
                    Aber damit Contao nicht dazwischen funkt, dürfen die Doctrine Tabellen nicht mit tl_ anfangen, daher kommt der orm_ Präfix.

                    Kommentar

                    • The_Unknown
                      Contao-Nutzer
                      • 29.01.2013
                      • 157

                      #11
                      OK, also wenn ich den DCA-Eintrag sql weglasse und dafür den inputType ergänze, passiert nichts. Wenn ich beide Werte setze, wird die Datenbank aktualisiert, und es klappt.
                      Zuletzt geändert von The_Unknown; 20.10.2014, 09:41.

                      Kommentar

                      • tril
                        Contao-Urgestein
                        • 07.01.2010
                        • 2939

                        #12
                        Teilst du uns noch mit was du genau gesetzt hast, damit andere da evtl. nicht nachfragen müssen

                        Kommentar

                        • The_Unknown
                          Contao-Nutzer
                          • 29.01.2013
                          • 157

                          #13
                          Na klar Das ganze unten in die dcaconfig.php oder in eine eigene DCA-Datei in einem eigenen Modul:

                          PHP-Code:
                          $dca = &$GLOBALS['TL_DCA']['orm_avisota_message'];
                          
                          /**
                           * Fields
                           */
                          unset($dca['fields']['description']['eval']['maxlength']);
                          unset($dca['fields']['description']['eval']['rows']);
                          $dca['fields']['description']['eval']['rte'] = 'tinyMCE';
                          $dca['fields']['description']['inputType'] = "textarea";
                          $dca['fields']['description']['sql'] = "text NULL"; 
                          
                          Und danach die Datenbank aktualisieren.

                          Kommentar

                          Lädt...