Ergebnis 1 bis 8 von 8

Thema: ContentElement registrieren

  1. #1
    Contao-Nutzer
    Registriert seit
    02.12.2017.
    Beiträge
    140

    Standard ContentElement registrieren

    Hallo zusammen,

    ich folge gerade den Docs um ein neues Content Element in einer Erweiterung von mir zu registrieren.

    Ich habe eine Palette im DCA angelegt:

    /src/Resources/contao/dca/tl_content.php:
    PHP-Code:
    use Contao\DC_Table;
    use 
    Contao\Backend;

    // Palettes
    $GLOBALS['TL_DCA']['tl_content']['palettes']['product_list'] = '{type_legend},type,headline;{template_legend:hide},customTpl;{protected_legend:hide},protected;{expert_legend:hide},guests,cssID;{invisible_legend:hide},invisible,start,stop'
    /src/Controller/ContentElements/ProductList.php:
    PHP-Code:
    <?php

    namespace ExtensionProvider\ContaoProductsBundle\Controller\ContentElement;

    use 
    Contao\CoreBundle\Controller\ContentElement\AbstractContentElementController;
    use 
    Contao\CoreBundle\DependencyInjection\Attribute\AsContentElement;
    use 
    Contao\ContentModel;
    use 
    Contao\Template;
    use 
    Symfony\Component\HttpFoundation\Request;
    use 
    Symfony\Component\HttpFoundation\Response;
    use 
    ExtensionProvider\ContaoProductsBundle\Model\ProductModel;
    use 
    Contao\System;

    #[AsContentElement(category:'texts', template:'ce_productList')]
    class ProductList extends AbstractContentElementController {

        protected function 
    getResponse(Template $templateContentModel $modelRequest $request): Response
        
    {
            
    $template->products ExtensionProvider\ContaoProductsBundle\Model\ProductModel::findAll([
                
    'order'    => 'tstamp desc'
            
    ]);
            return 
    $template->getResponse();
        }

    }
    Außerdem befindet sich im Ordner /src/Resources/contao/templates mein Template "ce_productList.html5".

    In den Docs habe ich es so verstanden, dass der Service Tag (in meinem Fall: #[AsContentElement(category:'texts', template:'ce_productList')]) genügt, um das Content Element zu registrieren (früher wurde das ja über die config registriert). Jedoch erhalte ich dennoch kein ContentElement, welches ich im Backend auswählen kann.

    Was mache ich falsch?
    Geändert von waldo (10.01.2024 um 14:44 Uhr)

  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

    Zitat Zitat von waldo Beitrag anzeigen
    In den Docs habe ich es so verstanden, dass der Service Tag (in meinem Fall: #[AsContentElement(category:'texts', template:'ce_productList')]) genügt, um das Content Element zu registrieren
    Das gilt für die App, wo auch automatisch alles im App\ Namespace als Service mit autowiring und autoconfiguration registriert wird. Laut deinem Code handelt es sich aber um eine Extension. Poste mal die services.yaml dieser Extension - oder einen Link zum Repository, wenn öffentlich verfügbar.
    » sponsor me via GitHub or PayPal or Revolut

  3. #3
    Contao-Nutzer
    Registriert seit
    02.12.2017.
    Beiträge
    140

    Standard

    Die Extension ist aktuell nicht öffentlich verfügbar. Eine services.yaml habe ich aktuell nicht, da ich es zuvor immer über die config.php gelöst hatte.

    Je nachdem was einfacher/sinniger wäre kann ich entweder den Namespace anpassen (die Erweiterung wird nicht wiederverwendet, daher kein großes Problem) oder eine services.yaml erstellen.
    Was würdest du hier empfehlen?

  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 waldo Beitrag anzeigen
    Eine services.yaml habe ich aktuell nicht
    Die Klasse muss als Service registriert werden.

    » https://docs.contao.org/dev/getting-...-configuration



    Zitat Zitat von waldo Beitrag anzeigen
    (die Erweiterung wird nicht wiederverwendet, daher kein großes Problem) oder eine services.yaml erstellen.
    Was würdest du hier empfehlen?
    Wenn das nur für eine spezifische Contao Installation ist, dann solltest du den Weg über App\ gehen, anstatt eine eigene Extension zu programmieren (unnötiger Aufwand).
    » sponsor me via GitHub or PayPal or Revolut

  5. #5
    Contao-Nutzer
    Registriert seit
    02.12.2017.
    Beiträge
    140

    Standard

    Bin gerade dabei die Erweiterung für den App\ Namespace anzupassen.
    Hier funktioniert es jetzt mit der Registrierung des Content Elements. Vielen Dank!

  6. #6
    Contao-Nutzer
    Registriert seit
    09.09.2009.
    Beiträge
    59

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Die Klasse muss als Service registriert werden.

    » https://docs.contao.org/dev/getting-...-configuration
    Ist das Beispiel denn dort dann richtig? Sollte es nicht eher

    PHP-Code:
    // src/DependencyInjection/ContaoExampleExtension.php
    namespace Somevendor\ContaoExampleBundle\DependencyInjection;

    use 
    Symfony\Component\Config\FileLocator;
    use 
    Symfony\Component\DependencyInjection\ContainerBuilder;
    use 
    Symfony\Component\DependencyInjection\Extension\Extension;
    use 
    Symfony\Component\DependencyInjection\Loader\YamlFileLoader;

    class 
    ContaoExampleExtension extends Extension
    ... 
    sein wie im Text darüber beschrieben?

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

    Standard

    Jap. Rechts oben kannst du editieren
    » sponsor me via GitHub or PayPal or Revolut

  8. #8
    Contao-Nutzer
    Registriert seit
    09.09.2009.
    Beiträge
    59

    Standard

    Wollte nur sicherstellen, dass ich nicht doch etwas übersehen habe. Korrektur ist gestellt.

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
  •