Contao-Camp 2024
Ergebnis 1 bis 9 von 9

Thema: Erweiterungen per DCA um Felder erweitern

  1. #1
    Contao-Nutzer
    Registriert seit
    06.04.2020.
    Beiträge
    116

    Standard Erweiterungen per DCA um Felder erweitern

    Hallo liebe Community,

    ich arbeite gerade an einem Projekt, in dem ich eine Extension habe, genauer felixpfeifer/subcolumns.

    Diese fügt ja (bekanntlich) die Spaltensets als neues Inhaltselement ein. Jetzt versuche ich gerade eine Kleinigkeit per DCA in dieses CE einzubinden.

    Im Grunde sieht es in meiner tl_content.php so aus:
    Code:
    PaletteManipulator::create()
    
        ->addField('kleinigkeit', 'colset_legend', PaletteManipulator::POSITION_APPEND)
    
        ->applyToPalette('colsetStart', 'tl_content')
        ;
    
    $GLOBALS['TL_DCA']['tl_content']['fields']['kleinigkeit'] = [
    
    Feld-Werte
    ];
    Die Palette "colsetStart" wird von der Extension eingefügt. Jetzt bekomme ich allerdings den Fehler, dass die Palette nicht existiert.

    Kann es sein, dass eine Manipulation von Extensions nicht so einfach ist, wie ich es mir vorstelle? Oder mache ich nur etwas falsch?

    Vielen Dank für Rückmeldungen
    LG Florin

  2. #2
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.714
    User beschenken
    Wunschliste

    Standard

    poste bitte den gesamten Inhalt Deines Files inkl. Ordner und Dateiname

  3. #3
    Contao-Nutzer
    Registriert seit
    06.04.2020.
    Beiträge
    116

    Standard

    Hallo Zonky,

    meine Datei ist wie folgt angelegt:

    root/contao/dca/tl_content.php

    Und sie sieht so aus:

    Code:
    use Contao\CoreBundle\DataContainer\PaletteManipulator;
    
    PaletteManipulator::create()
    
        ->addField('sc_type_own', 'colset_legend', PaletteManipulator::POSITION_APPEND)
    
        ->applyToPalette('colsetStart', 'tl_content')
        ;
    
    $GLOBALS['TL_DCA']['tl_content']['fields']['sc_type_own'] = array
    (
    	'label'		=> &$GLOBALS['TL_LANG']['tl_content']['sc_type_own'],
    	'inputType'	=> 'select',
    	'options_callback'=> array('tl_content_sc','getAllTypes'),
    	'eval'		=> array('includeBlankOption'=>true, 'mandatory'=>true, 'tl_class'=>'w50'),
        'sql'       => "varchar(64) NOT NULL default ''"
    );

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

    Standard

    Die Palette wird von der Erweiterung über einen onload_callback eingefügt: https://github.com/felixpfeiffer/Con...ntent.php#L129 » https://github.com/felixpfeiffer/Con....php#L163-L175

    Daher müsstest du das auch machen (mit einer niedrigeren Priority).
    » sponsor me via GitHub or PayPal or Revolut

  5. #5
    Contao-Nutzer
    Registriert seit
    06.04.2020.
    Beiträge
    116

    Standard

    Ok, Danke! Das hat soweit funktioniert.

    Eine Frage habe ich dabei allerdings:

    Das onload_callback braucht ja, soweit ich das verstanden habe, eine definierte Klasse.

    In den Subcolumns ist dafür tl_content_sc definiert worden.

    Code:
    class tl_content_sc extends tl_content{
    public function createPalette(DataContainer $dc){
    ...
    }
    }
    Ich habe für meinen Zweck die tl_content_sc nochmal erweitert:

    Code:
    $GLOBALS['TL_DCA']['tl_content']['config']['onload_callback'][] = array('tl_content_sc_ext','addToSubc');
    
    class tl_content_sc_ext extends tl_content_sc{
    function addToSubc() {
    ...
    }
    }
    kann ich Funktionen, die ich über onload_callback starte, auch in schon vorhandenen Klassen erstellen?
    Bzw "class" fügt ja offenbar die eingegebene Klasse hinzu, was dann in einem Fehler á la "Klasse existiert bereits" resultiert. Was wäre denn der Call für eine vorhandene Klasse?

    Ich hoffe das war verständlich... das Ding hier ist mein erster Einblick in diese Funktionalität.

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

    Standard

    Zitat Zitat von FlorinvV Beitrag anzeigen
    Das onload_callback braucht ja, soweit ich das verstanden habe, eine definierte Klasse.
    Nicht unbedingt, kannst du auch über eine anonyme Funktion machen. Sollte in diesem Fall ausreichen.
    » sponsor me via GitHub or PayPal or Revolut

  7. #7
    Contao-Nutzer
    Registriert seit
    06.04.2020.
    Beiträge
    116

    Standard

    Wie würde das dann aussehen?

    Ich habe versucht die Funktion ohne Klasse einzubinden:

    Code:
    $GLOBALS['TL_DCA']['tl_content']['config']['onload_callback'][] = array('addToSubc');
    Das hat dann allerdings die Funktion für eine Klasse gehalten und demensprechend einen Fehler ausgegeben...

    Gibt es ein spezielles Element für diesen Array der aussagt, dass es keine definierte Klasse gibt?

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

    Standard

    PHP-Code:
    use Contao\CoreBundle\DataContainer\PaletteManipulator;

    $GLOBALS['TL_DCA']['tl_content']['config']['onload_callback'][] = function() {
        
    PaletteManipulator::create()
            ->
    addField('sc_type_own''colset_legend'PaletteManipulator::POSITION_APPEND)
            ->
    applyToPalette('colsetStart''tl_content')
        ;

        
    $GLOBALS['TL_DCA']['tl_content']['fields']['sc_type_own'] = [
            
    'inputType' => 'select',
            
    'options_callback'=> ['tl_content_sc','getAllTypes'],
            
    'eval' => ['includeBlankOption' => true'mandatory' => true'tl_class'=>'w50'],
            
    'sql' => ['type' => 'string''length' => 64'default' => ''],
        ];
    }; 
    (ungetestet)
    Geändert von Spooky (07.10.2021 um 09:55 Uhr)
    » sponsor me via GitHub or PayPal or Revolut

  9. #9
    Contao-Nutzer
    Registriert seit
    12.05.2011.
    Ort
    23883 Brunsmark
    Beiträge
    111

    Standard Typo bei "length"

    Typo bei "length"

    Zitat Zitat von Spooky Beitrag anzeigen
    PHP-Code:
    use Contao\CoreBundle\DataContainer\PaletteManipulator;

    $GLOBALS['TL_DCA']['tl_content']['config']['onload_callback'][] = function() {
        
    PaletteManipulator::create()
            ->
    addField('sc_type_own''colset_legend'PaletteManipulator::POSITION_APPEND)
            ->
    applyToPalette('colsetStart''tl_content')
        ;

        
    $GLOBALS['TL_DCA']['tl_content']['fields']['sc_type_own'] = [
            
    'inputType' => 'select',
            
    'options_callback'=> ['tl_content_sc','getAllTypes'],
            
    'eval' => ['includeBlankOption' => true'mandatory' => true'tl_class'=>'w50'],
            
    'sql' => ['type' => 'string''lenght' => 64'default' => ''],
        ];
    }; 
    (ungetestet)

Aktive Benutzer

Aktive Benutzer

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

Lesezeichen

Lesezeichen

Berechtigungen

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