Ankündigung

Einklappen
Keine Ankündigung bisher.

Eigenes SQL-Feld wird nicht angezeigt

Einklappen
Dieses Thema ist geschlossen.
X
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Eigenes SQL-Feld wird nicht angezeigt

    Ich verwende Inhaltselemente 4.3.4 bei Contao 4.9.13
    Wenn ich bei Attributtyp "Eigenes SQL Feld" auswähle, erhalte ich kein Eingabefeld, wo ich den SQL-Befehl eingeben kann.
    Das Feld in das ich es im Sceenshot eingetragen habe, kann ja hire nicht das richtige sein, oder?



  • #2
    Dieses Attribut dient zum Definieren eines eingabefreien SQL-Feldes in der Datenbank.
    Das Feld "Standardwert" dient hier als sql-Felddefinition des Feldes nach DCA Vorgaben von Contao z.B.
    varchar(255) NOT NULL default '' oder blob NULL

    CC wird entsprechend ein Feld in der DB anlegen, das durch eigenen Logiken frei befeuert werden kann.
    ---
    Eigene SQL Befehle dieser Art sollten in einem gesonderten load_callback eines Feldes platziert werden.
    Zuletzt geändert von Tim; 17.05.2021, 11:34.
    http://www.premium-contao-themes.com

    Kommentar


    • #3
      Ok, dann bin ich hier scheinbar mit meinem Versuch an der falschen Stelle.

      Was ich versuche ist, im Backend - wo man letztendlich die Daten einpflegt - nur eine selektierte Auswahl für das Listenfeld "Unternehmensname / Institutionsname" bereit zu stellen, und nicht alle Datensätze.

      Also in diesem Fall sollen aus der tabelle firmen nur die Datensätze angezeigt werden, die im Feld firmen.pid == tl_users.id entspricht.
      Gibt es irgendwo ein kleines Tutorial wie man diese load_callbacks verwendet und anlegt?

      Kommentar


      • #4
        Ok, habe mich nun mal soweit durchgearbeitet:
        1. Verzeichnis /contao/dca angelegt
        2. Darin cc_ausbildungsstellen.php angelegt
        Darin ist folgender Code:
        PHP-Code:
         use Contao\BackendUser;
        use 
        Contao\System;
        use 
        Symfony\Component\Security\Core\Exception\AccessDeniedException;
           
        $GLOBALS['TL_DCA']['cc_ausbildungsstellen']['fields']['firma']['load_callback'][] = array('loadMyCompany','loadCompanyCallback');  if( !class_exists('loadMyCompany') )
        {
            class 
        loadMyCompany
            
        {
                private 
        $objUser;
                public function 
        __construct()
                {
                    
        $this->objUser BackendUser::getInstance();
                }
                   public function 
        loadCompanyCallback($varValue$objDC)
                {
                    
        $result = array();              $objResult = \Contao\Database::getInstance()->prepare("SELECT * FROM cc_firmen WHERE `firma_schützen`=15 ORDER BY ?")->execute("firmenname");
        var_dump($objResult->row());
                   if(
        $objResult->numRows 0)
                    {
                        while(
        $objResult->next())
                        {
                            if(
        strlen($objResult->restrictedCte) < 1)
                            {
                                continue;
                            }
                            
        //print_r($objResult->fetchAssoc());
                            
        array_push($result,$objResult->fetchAssoc()['firmenname']);
                        }                  echo 
        "<hr>";
                       
        var_dump($varValue);
                        return 
        $result;
                    }
               }
            }

        Ist das schon mal für den Anfang soweit richtig?
        Zumindest bekomme ich in der Eingabemaske nun (in einer Kontrollausgabe) Datenergebnisse von meinen Abfragen geliefert.

        Was mir nun noch fehlt:
        In welcher Form muss der Return-Wert vorliegen, damit er in dem Feld verarbeitet werden kann?
        Du siehst oben, dass ich versucht habe einen Array mit den Firmennamen zurück zu geben, aber das brachte kein Ergebnis. Es werden dennoch alle Firmen (derzeit 3) im Pulldown-Feld angezeigt (siehe Bild im Anhang)

        Angezeigt werden sollte eigentlich nur "Musterfirma", da nur diese zum aktuellen User gehört.
        Zuletzt geändert von rethus; 19.05.2021, 00:02.

        Kommentar


        • #5
          Wenn du ein Select-Feld nutzen willst, nutze einfach ein Feld vom Typ: Einfache Auswahl oder Einfache Auswahl Datenbank.
          http://www.premium-contao-themes.com

          Kommentar


          • #6
            Damit habe ich es leider nicht hinbekommen.
            Ziel ist es, in der Eingabemaske "Ausbildungsstellen" auf Basis der ID des Users, der gerade eingeloggt ist aus der Tabelle cc_firma die Firmennamen zu ermitteln (1-n), die zu diesem User gehören.
            Alle Ergebnisse sollen dann im Select-Feld ausgegeben werden, nicht aber Firmen, die zu anderen Usern gehören.

            Hatte auch erst versucht über "Einfache Auswahl Datenbank" zu gehen, hier scheitert es aber daran, das ich es nicht hinbekomme in der Bedingung die eigene User-ID zu übermitteln. Gibt es hier ggf. eine Art Platzhalter die man in den Bedingungen nutzen kann?
            Sowas wie
            Code:
            `firma_schützen`={{user::id}}
            Wenn ich dass allerdings eingebe, gibt er mir nen Contao-Error aus, in dem dieser Platzhalter {{user::id}} immer noch drin steht, und damit den SQL-Befehl zerschießt.
            Zuletzt geändert von rethus; 19.05.2021, 09:39.

            Kommentar


            • #7
              Ich würde ein Select-Feld als Basis nutzen und über dessen DCA im options_callback die gewünschten Werte ermitteln. CC arbeitet hand in hand mit Contaos DCA. Du kannst also jedes CC generierte Feld via dessen DCA erweitern und manipulieren.

              https://easysolutionsit.de/artikel/c...callbacks.html

              dcaconfig.php

              Code:
               $GLOBALS['TL_DCA']['cc_meineTabelle']['fields']['meinSelect']['options_callback'] = array('meineKlasse','meinCallback');
              Damit kannst du die Werte-Auswahl bereits mit einer eigenen Logik bereitstellen.

              ps. Inserttags werden im Backend nicht aufgelöst.
              http://www.premium-contao-themes.com

              Kommentar


              • #8
                Super, das war der entscheidende Tipp. Vielen Dank Tim.

                Kommentar

                Lädt...
                X