Ergebnis 1 bis 10 von 10

Thema: Äquivalent zu inputType pageTree für eigene Tabelle

  1. #1
    Contao-Fan Avatar von Babelfisch
    Registriert seit
    30.06.2009.
    Ort
    Leipzig
    Beiträge
    945
    Contao-Projekt unterstützen

    Support Contao

    Standard Äquivalent zu inputType pageTree für eigene Tabelle

    Hallo!

    Ich habe eine Tabelle, die mit sorting mode 5 (Tree) definiert ist und Datensätze ähnlich wie tl_page über id -> pid verschachtelt. In einer anderen Tabelle möchte ich daraus einen Wert auswählen. Da es mehrere hundert Einträge sind, macht ein normales Dropdown keinen Sinn und ich bräuchte optimalerweise eine Auswahl ähnlich wie bei 'inputType'=>'pageTree'.

    Gibt es evtl. so etwas schon oder kann mir jemand einen Tipp geben, wie ich das am besten realisieren kann? Da so ein Picker für eine verschachtelte Tabelle ja eigentlich generisch ist, habe ich die Hoffnung, dass es da schon irgendetwas gibt oder zumindest etwas ähnliches, was ich für meine Erweiterung anpassen kann.

    Gruß
    Geändert von Babelfisch (Gestern um 14:14 Uhr)
    Meine aktiven Contao-Projekte: LingoliaStiftung firmm

  2. #2
    Contao-Urgestein
    Registriert seit
    24.02.2021.
    Beiträge
    2.080
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat Zitat von Babelfisch Beitrag anzeigen
    Hallo!

    Ich habe eine Tabelle, die mit sorting mode 5 (Tree) definiert ist und Datensätze ähnlich wie tl_page über id -> pid verschachtelt. In einer anderen Tabelle möchte ich daraus einen Wert auswählen. Da es mehrere hundert Einträge sind, macht ein normales Dropdown keinen Sinn und ich bräuchte optimalerweise eine Auswahl ähnlich wie bei 'inputType'=>'pageTree'.

    Gibt es evtl. so etwas schon oder kann mir jemand einen Tipp geben, wie ich das am besten realisieren kann? Da so ein Picker für eine verschachtelte Tabelle ja eigentlich generisch ist, habe ich die Hoffnung, dass es da schon irgendetwas gibt oder zumindest etwas ähnliches, was ich für meine Erweiterung anpassen kann.

    Gruß
    dcaPicker? https://docs.contao.org/5.x/dev/refe...-picker-fields

  3. #3
    Contao-Fan Avatar von Babelfisch
    Registriert seit
    30.06.2009.
    Ort
    Leipzig
    Beiträge
    945
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Hatte ich probiert aber das zeigt mir irgendwie nur tl_page an. Ich habe jetzt noch weiter gesucht und 'inputType' => 'picker' ist wohl die Lösung.

    PHP-Code:
    'stratigraphy' => [
      
    'inputType' => 'picker',
      
    'foreignKey' => 'tl_foss_stratigraphy.title',
      
    'relation' => ['type' => 'belongsTo''load' => 'lazy'],

    Damit bekomme ich die gewünschte Auswahl. Cool!
    Meine aktiven Contao-Projekte: LingoliaStiftung firmm

  4. #4
    Contao-Fan Avatar von Babelfisch
    Registriert seit
    30.06.2009.
    Ort
    Leipzig
    Beiträge
    945
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Moin!

    Kleiner Nachtrag für alle, die das auch nutzen wollen: Damit die Auswahl auch leer bleiben kann, muss null als default-Wert angeben werden. Das Feld selbst muss natürlich auch nullable sein.

    PHP-Code:
    'stratigraphy' => [
      
    'inputType' => 'picker',
      
    'default' => null,
      
    'foreignKey' => 'tl_foss_stratigraphy.title',
      
    'relation' => ['type' => 'belongsTo''load' => 'lazy'],
      
    'sql' => "int(10) unsigned default null"// oder, siehe unten

    Oder, wenn die Tabelle über Doctrine und ein Entity defininiert wird:

    PHP-Code:
    #[ORM\ManyToOne(targetEntity: FossStratigraphy::class)]
    #[ORM\JoinColumn(name: 'stratigraphy', referencedColumnName: 'id', nullable: true, options: ['default' => null])]
    private ?FossStratigraphy $stratigraphy null
    Ansonsten kam bei mir beim Speichern ein SQL-Fehler, wenn nichts ausgewählt war.

    Gruß
    Meine aktiven Contao-Projekte: LingoliaStiftung firmm

  5. #5
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    38.673
    Partner-ID
    10107

    Standard

    Null muss es nicht unbedingt sein - Typischerweise definierst du's so:
    PHP-Code:
    'sql' => ['type' => 'integer''unsigned' => true'default' => 0
    Siehe auch https://docs.contao.org/5.x/dev/refe...cker/#examples
    » sponsor me via GitHub or Revolut

  6. #6
    Contao-Fan Avatar von Babelfisch
    Registriert seit
    30.06.2009.
    Ort
    Leipzig
    Beiträge
    945
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Das hatte ich aber da kam dann der angesprochene SQL-Fehler. Vermutlich hängt das mit der Definition über Doctrine zusammenhängt, da dort noch ein extra Index erzeugt wird.

    Mit Doctrine musste ich auch jeden Fall das Feld nullable machen und 'default' => null in der DCA angeben. Erst danach ließ sich sich der Datensatz speichern, wenn nichts angegeben wurde. Bei der Angabe vom SQL über die DCA geht wohl auch 0 als Wert. Ich werde das noch einmal in Ruhe testen.
    Meine aktiven Contao-Projekte: LingoliaStiftung firmm

  7. #7
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    38.673
    Partner-ID
    10107

    Standard

    Zitat Zitat von Babelfisch Beitrag anzeigen
    Das hatte ich aber da kam dann der angesprochene SQL-Fehler.
    Und was für ein Fehler?
    » sponsor me via GitHub or Revolut

  8. #8
    Contao-Fan Avatar von Babelfisch
    Registriert seit
    30.06.2009.
    Ort
    Leipzig
    Beiträge
    945
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Wenn ich in der DCA 'default' => null weglasse oder 'default' => 0 schreibe, dann bekomme ich beim Speichern diesen Fehler, wenn ich nichts auswähle:

    Code:
    An exception occurred while executing a query: SQLSTATE[HY000]: General error: 1366 Incorrect integer value: ‚‘ for column ‚stratigraphy‘ at row 1
    Ausgelöst wird es durch dieses Query:

    Code:
    Doctrine\DBAL\Exception\DriverException {#8649
      -query: Doctrine\DBAL\Query {#6588
        -sql: "UPDATE tl_foss_taxonomy SET `stratigraphy` = ?, `tstamp` = ? WHERE id=?"
        -params: array:3 [
          0 => ""
          1 => 1780387023
          2 => "3"
        ]
        -types: array:3 [?]
      }
    }
    Definiert habe ich es in dem Fall so:

    Entity
    PHP-Code:
    #[ORM\ManyToOne(targetEntity: FossStratigraphy::class)]
    #[ORM\JoinColumn(name: 'stratigraphy', referencedColumnName: 'id', nullable: true, options: ['default' => null])]
    private ?FossStratigraphy $stratigraphy null
    DCA
    PHP-Code:
    'stratigraphy' => [
      
    'inputType' => 'picker',
      
    // 'default' => null,
      
    'foreignKey' => 'tl_foss_stratigraphy.title',
      
    'eval' => ['includeBlankOption' => true'tl_class' => 'w50'],
      
    'relation' => ['type' => 'belongsTo''load' => 'lazy'],
    ], 
    Meine aktiven Contao-Projekte: LingoliaStiftung firmm

  9. #9
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    38.673
    Partner-ID
    10107

    Standard

    Achso, du machst die Spalte als Entity, nicht über das DCA.

    Contao Standard wäre auf jeden Fall so:
    PHP-Code:
    'stratigraphy' => [
        
    'inputType' => 'picker',
        
    'foreignKey' => 'tl_foss_stratigraphy.title',
        
    'eval' => ['includeBlankOption' => true'tl_class' => 'w50'],
        
    'relation' => ['type' => 'belongsTo''load' => 'lazy'],
        
    'sql' => ['type' => 'integer''unsigned' => true'default' => 0],
    ], 
    » sponsor me via GitHub or Revolut

  10. #10
    Contao-Fan Avatar von Babelfisch
    Registriert seit
    30.06.2009.
    Ort
    Leipzig
    Beiträge
    945
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Ja, so funktioniert es, wenn man es über das DCA anlegt. Durch Doctrine und JoinColumn wird aber ein FOREIGN KEY angelegt und das passt dann nicht mit 0 als default-Wert zusammen.

    Soweit ich sehe, klappt das aber auch alles mit null als default-Wert. Denkst du, dass es da trotzdem noch mit Contao irgendwo Probleme geben könnte? Ansich sind die Entities ja schon eine feine Sache und ich würde sie gerne nutzen.
    Meine aktiven Contao-Projekte: LingoliaStiftung firmm

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 15 (Registrierte Benutzer: 0, Gäste: 15)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •