Ergebnis 1 bis 5 von 5

Thema: DCA Felder in eigenem Inhaltselement erscheinen nicht

  1. #1
    Contao-Nutzer
    Registriert seit
    01.04.2023.
    Beiträge
    61

    Standard DCA Felder in eigenem Inhaltselement erscheinen nicht

    Hallo Forum,

    ich war schon in der Suche unterwegs, habe aber nichts passendes gefunden.

    Ich bin dabei, ein eigenes Content-Element zu erstellen. Das hat bis jetzt (alte Projekte) auch immer funktioniert.
    In diesem Projekt habe ich nun alles über Annotations aufgebaut. Vielleicht liegt da mein Problem, weil ich etwas grundlegendes vergesse.

    Mein Problem ist, dass im Backend 'nur' das Feld Typ mit der Auswahl des Elements erscheint. Kein Feld vom Typ Text. Auch andere Felder, die ich über die DCA angelegt habe und der Palette hinzugefügt habe, werden im Backend nicht angezeigt.
    Das müsste doch über die DCA einfach erweiterbar sein, oder muss ich etwa alle Felder per 'PaletteManipulator' hinzufügen? Ich möchte ja zu keiner bestehenden DCA ein Feld hinzufügen. Daher müsste es doch auch ohne gehen, oder?

    Vielleicht hat jemand einen Tipp für mich...?

    Ich habe mich an die Anleitung gehalten.

    Erst die DCA erweitert:
    PHP-Code:
    // contao/dca/tl_content.php
    $GLOBALS['TL_DCA']['tl_content']['palettes']['ce_stageteaser'] = '{type_legend},type;{text_legend},text'
    Dann den Controller per Annotation eingebunden:
    PHP-Code:
    <?php
    // src/Controller/ContentElement/StageTeaserController.php
    namespace App\Controller\ContentElement;

    use 
    Contao\CoreBundle\Controller\ContentElement\AbstractContentElementController;
    use 
    Contao\CoreBundle\ServiceAnnotation\ContentElement;
    use 
    Contao\ContentModel;
    use 
    Contao\Template;
    use 
    Symfony\Component\HttpFoundation\Request;
    use 
    Symfony\Component\HttpFoundation\Response;

    /**
     * @ContentElement(category="extra", template="ce_stageteaser")
     */
    class StageTeaserController extends AbstractContentElementController
    {

        protected function 
    getResponse(Template $templateContentModel $modelRequest $request): Response
        
    {
            
    $template->text $model->text;

            return 
    $template->getResponse();
            
        }
    }
    Das Template angelegt:
    Code:
    contao/templates/ce_stageteaser.html5
    Und die Sprachdatei erstellt:
    PHP-Code:
    // contao/languages/de/default.php
    $GLOBALS['TL_LANG']['CTE']['ce_stageteaser'] = ['Stageteaser','Bindet ein Stageteaser-Element ein.']; 

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

    Standard

    Da du in deinem Controller keinen type definiert hast, wird der Type automatisch ermittelt. Der automatisch generierte type ist in deinem Fall dann "stage_teaser". Du hast aber momentan überall "ce_stageteaser" referenziert.
    » sponsor me via GitHub or PayPal or Revolut

  3. #3
    Contao-Nutzer
    Registriert seit
    01.04.2023.
    Beiträge
    61

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Da du in deinem Controller keinen type definiert hast, wird der Type automatisch ermittelt. Der automatisch generierte type ist in deinem Fall dann "stage_teaser". Du hast aber momentan überall "ce_stageteaser" referenziert.
    Habe ich also doch etwas übersehen Danke dir Spooky!!
    Wenn ich in die DCA den automatisch generierten Typ schreibe, funktioniert es. Ich denke, so ist auch der korrekte Weg, oder? Wenn man den Klassenname einfach in die Snake-Schreibweise ändert und das als Referenz nimmt!?

    Wie würde man denn theoretisch einen eigenen Namen vergeben können?
    In die Annotation dann einfach den 'type' mit aufnehmen? Funktioniert so nicht bei mir.
    PHP-Code:
    // ...
    /**
     * @ContentElement(category="extra", template="ce_stageteaser", type="ce_stageteaser")
     */
    class StageTeaserController extends AbstractContentElementController
    {
        protected function 
    getResponse(Template $templateContentModel $modelRequest $request): Response
        
    {
            
    $template->text $model->text;

            return 
    $template->getResponse();
            
        }


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

    Standard

    Zitat Zitat von pottkind Beitrag anzeigen
    In die Annotation dann einfach den 'type' mit aufnehmen?
    Genau, ja. Ist auch in der Dokumentation beschrieben.

    Zitat Zitat von pottkind Beitrag anzeigen
    Funktioniert so nicht bei mir.
    PHP-Code:
    // ...
    /**
     * @ContentElement(category="extra", template="ce_stageteaser", type="ce_stageteaser")
     */
    class StageTeaserController extends AbstractContentElementController
    {
        protected function 
    getResponse(Template $templateContentModel $modelRequest $request): Response
        
    {
            
    $template->text $model->text;

            return 
    $template->getResponse();
            
        }

    Das "ce_" Prefix wäre untypisch für den Type. Dadurch würdest du im Frontend die Klasse "ce_ce_stageteaser" bekommen. Könnte auch noch andere Probleme verursachen.
    » sponsor me via GitHub or PayPal or Revolut

  5. #5
    Contao-Nutzer
    Registriert seit
    01.04.2023.
    Beiträge
    61

    Standard

    Perfekt.
    Danke für die schnelle Hilfe!!

Aktive Benutzer

Aktive Benutzer

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

Lesezeichen

Lesezeichen

Berechtigungen

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