Eigenes Feld / Custom Field vom Typ Auswahl (select)

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • Arno
    Contao-Fan
    • 11.12.2009
    • 290

    #1

    Eigenes Feld / Custom Field vom Typ Auswahl (select)

    Ich versuche gerade ein Problem zu lösen und komme nicht weiter:
    Projektbedingt brauche ich ein Custom-Field für den Catalog und zwar im Prinzip eines vom Typ "Auswahl". Das habe ich auch soweit hinbekommen, kann meinen eigenen Feldtypen im Backend anlegen, Eigenschaften festlegen und speichern.
    Aber: Für die Optionen habe ich eine Taxonomy-Tabelle als Quelle angegeben und bearbeite ich nun ein Catalog-Item werden mir in meinem Select-Menü die Optionen nicht angezeigt, sondern es bleibt einfach leer (bis auf die erste Option "-").

    Ich suche nun schon seit Stunden in den Catalog-Files herum um rauszufinden welcher Callback(?) oder welche Funktion für das Befüllen des Select-Menüs zuständig sein könnte, aber leider bin ich bisher überhaupt nicht weiter gekommen.

    Hat jemand eine Idee?

    Lieben Dank.
  • MacKP
    Contao-Yoda
    • 15.06.2009
    • 13315

    #2
    Hallo Arno,
    du solltest die Taxonomie auf jeden fall so machen, das die Werte nicht direkt im Hauptzweig liegen, sondern so:

    - Auswahl
    -- Wert1
    -- Wert2

    Also wenigstens noch ein Eltern Element. Dann geht das schon mal besser. Danach dann noch die Auswahl Einschränken (oder wie auch immer das noch mal heißt. Hab gerade nicht so die Zeit nachzuschauen). Wo du dann genau festlegst, was ausgewählt werden darf. Das hat bei mir zumindest immer am besten funktioniert.

    Viele Grüße

    Achso: kann auch sein, das es ein Bug der ER Version ist.. dann bitte (wie immer an der Stelle) die SVN Version ausprobieren...
    Contao Pool | C-C-A | MetaModels | [Internetseite -> Mediendepot Ruhr]
    [Arbeitet bei -> Paus Design & Medien]
    "I can EXPLAIN it to you, but I can't UNDERSTAND it for you."

    Kommentar

    • Arno
      Contao-Fan
      • 11.12.2009
      • 290

      #3
      Moin MacKP,

      lieben Dank erstmal für deine Antwort.
      Ich glaube aber, dass ich mein Problem nicht genau genug beschrieben habe. Ich habe ja gar kein Problem mit dem Feldtyp "Auswahl" an sich, sondern lediglich mit der Kopie dieses Feldtypen (trägt den Namen "Conformance Level"), die ich selber angelegt habe! Ich habe Felder vom Typ "Auswahl" in meinem Katalog, die sich ihre Optionen auch problemlos auf die von dir beschriebene Art und Weise aus der Taxonomie ziehen können.

      Das Problem der nicht erscheinenden Optionen betrifft also lediglich meinen eigenen Feldtyp "Conformance Level", wenn ich ein Catalog-Item bearbeite und eben diesen Conformance Level festlegen will. Da habe ich dann keine Optionen zur Auswahl. Ich vermute also, dass der Feldtyp durch das Modul "Catalog Edit" nicht korrekt gerendert wird. Ist das möglich?
      Nur zur Verdeutlichung: Warum ich eigentlich diesen eigenen Feldtypen haben will: Ich brauche einn onChange Callback auf diesem Feld. Da ich den aber eben nicht standardmäßig auf alle Felder vom Typ "Auswahl" haben möchte, dachte ich mir eben, dass ich mir eine Kopie dieses Feldtypen anlege. Ich habe mir also in der Datei "tl_catalog_fields.php" (bzw. in einer Override-Version dieser Datei) die nötigen Anweisungen kopiert und in den Array
      Code:
      $GLOBALS['TL_DCA']['tl_catalog_fields']['fields']['type']['options']
      mein neues Feld "Conformance Level" hinzugefügt. In der "config.php" habe ich die nötigen Anweisungen hinzugefügt, damit mein neuer Feldtyp auch im entsprechenden Auswahlfeld beim Anlegen eines neuen Katalogfeldes erscheint. Das funktioniert auch alles gut. Ich kann das Feld anlegen, die Eigenschaften festlegen und speichern. Wird in der Datenbank auch artig gemacht. Nur wenn ich dann entweder im Backend oder Frontend das Katalog-Item bearbeiten will fehlen die Optionen.

      Wenn ich jetzt aber so weiter denke und mal voraussetze, dass meine Vermutung richtig ist und das Feld einfach vom Katalog nicht korrekt gerendert wird, weil der Katalog es ja eigentlich auch gar nicht kennen kann, dann stehe ich ja auch vor dem Problem, dass ich gar nicht weiß, wo ich eigentlich meinen gewünschte onChange-Callback unterbringen soll. Aber so weit bin ich ja ohnehin noch gar nicht. Im Augenblick kann ich ja gar nicht "changen", weils keine Optionen gibt.

      Nun denn, ich danke jedenfalls für weitere Anregungen und hoffe, dass ich einigermaßen habe klarmachen können was mein Problem ist!?

      Viele Grüße,
      Arno.

      Kommentar

      • xtra
        Maintainer
        • 02.07.2009
        • 2007

        #4
        Das select ist einer der "internen" Feldtypen, der ist leider nicht erweiterbar (in MetaModels ist das viel eleganter geloest. ).

        Du kannst es jedoch analog zum UserID Feld machen. Das zeigt fyr admins im BE naemlich eine select box an, da kannst du dir abguggen, wie man options in einen eigenen Feldtyp reinrendert.

        Die Funktion aus dem Catalog Core, die die Optionen aus tl_taxonomy zieht ist:

        Catalog::selectConfig();

        Diese ihrerseits zieht die Daten dann via: Catalog::configOptions();

        Da erstere Methode jedoch private ist, ist fyr dich vermutlich der einfachste Weg, den HOOK: $GLOBALS['TL_HOOKS']['getCatalogDca'] zu verwenden, welcher fyr jedes Feld aufgerufen wird.

        PHP-Code:
        /**
        hierbei:
        $objField == Database_Result des aktuellen Felds (Datensatz aus tl_catalog_fields)
        $dca == das DCA array das bislang erzeugt wurde.
        $objCatalogDB == Database_Result des aktuellen Katalogs (Datensatz aus tl_catalog_types)
        $objCatalog == aufrufende Instanz der Catalog Klasse
        */
        public function getCatalogDcaHOOK($objField, $dca, $objCatalogDB, $objCatalog)
        {
          $dca['fields'][$objField->colName] = array
          (
            'load_callback' = array('Catalog', 'loadSelect');
          );
          $this->configOptions($dca['fields'][$objField->colName], $objField, false);
        } 
        
        Das sollte dich eigentlich schon recht weit bringen.
        Bedenke stets: Wenn Du ungenaue oder unzureichende Angaben machst, so koennte dies die Bearbeitung deiner Frage endlos verzoegern (oder sogar dazu fyhren, dass ich zu viel nachdenken muss und die Antwort vergesse!). Kein Support per PN.

        Kommentar

        • Arno
          Contao-Fan
          • 11.12.2009
          • 290

          #5
          Hallo xtra,

          danke für deine Hinwseise.

          Das mit den Funktionen selectConfig / configOptions im Catalog-Core hatte ich inzwischen auch entdeckt und angefangen damit zu experimentieren. Bin aber auch nicht weit gekommen damit.
          Das Nachschauen bei useridfield und der Hook haben mit leider nicht helfen können. Aus beidem werde ich ehrlich gesagt nicht ganz schlau, mit fehlt aber leider auch im Augenblick etwas die Ruhe, um mich konzentriert damit auseinandersetzen zu können.
          Ich habe mich jetzt glaube ich ohnehin entschieden das Problem lieber anders anzugehen und doch mit einem Standard-Auswahlfeld zu arbeiten und mich dann irgendwie mit einem Save-Callback oder so durchzuschlagen. Ist noch nicht ausgereift.

          Lieben Dank aber trotzdem nochmal für deine Ideen.

          Kommentar

          Lädt...