Ergebnis 1 bis 10 von 10

Thema: Eigenes ContentElement in einem AppBundle

  1. #1
    Contao-Nutzer
    Registriert seit
    02.04.2021.
    Beiträge
    68

    Standard Eigenes ContentElement in einem AppBundle

    Hallo Zusammen,
    versuche seit Tagen ein eigenes Contentelement in ein AppBundle zu packen. Warum AppBundle? Weil ich das möglichst sauber an einer Stelle haben will und nicht diverse Templates und DCA definitionen zwischen meinen Webs herum kopieren will.

    2 Versuche habe ich auf halben Weg hinbekommen:
    1. Grundsätzlich konnte ich nach dieser Anleitung eines erstellen https://docs.contao.org/dev/framework/content-elements/, nur bringe ich das nicht in ein AppBundle.
    2. Nach dieser Anleitung hätte ich sogar ein ContentElement in einem AppBundle https://community.contao.org/de/show...anaged-Edition, aber das ist soweit weg von der Doku, das kann ich nicht für mich erweitern.

    Wie bekomme ich die Version aus Punkt 1 (der offiziellen Doku) in ein AppBundle?

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

    Standard

    versuche mal das als Basis: https://www.contao-bayern.de/newsrea...on-center.html

    wobei man z.B. die Dateien nicht direkt in den Ordner AppBundle wirft sondern in die entsprechenden Unterordner wie z.B. src/AppBundle/EventListener

    Wenn es den Ordner src/AppBundle/Resources gibt, kannst Du nicht mit den Annotations arbeiten sondern packst die Sachen in die service.yml

  3. #3
    Contao-Nutzer
    Registriert seit
    02.04.2021.
    Beiträge
    68

    Standard

    Danke für den Versuch, aber das bringt mich leider nicht weiter. Ich will ja das mit einem Controller machen, so wie in der Contaodoku.

    Ich habe jetzt Folgenden Struktur versucht:

    app/ContaoManagerPlugin.php
    PHP-Code:
     <?php

    use Contao\ManagerPlugin\Routing\RoutingPluginInterface;
    use 
    Symfony\Component\Config\Loader\LoaderResolverInterface;
    use 
    Symfony\Component\HttpKernel\KernelInterface;

    use 
    Contao\CoreBundle\ContaoCoreBundle;
    use 
    Contao\ManagerPlugin\Bundle\BundlePluginInterface;
    use 
    Contao\ManagerPlugin\Bundle\Parser\ParserInterface;
    use 
    Contao\ManagerPlugin\Bundle\Config\BundleConfig;


    class 
    ContaoManagerPlugin implements BundlePluginInterface
    {
        
    /**
         * {@inheritdoc}
         */
        
    public function getBundles(ParserInterface $parser)
        {
             return [
                
    BundleConfig::create(TextFmBundle\TextFmBundle::class)->setLoadAfter([ContaoCoreBundle::class])
            ];
        }
    }
    composer.json
    PHP-Code:
    {
        
    "type""project",
        
    "require": {
            
    "codefog/contao-social_images""^3.7",
            
    "contao-themes-net/zero-one-theme-bundle""^1.8",
            
    "contao/calendar-bundle""4.9.*",
            
    "contao/comments-bundle""4.9.*",
            
    "contao/conflicts""*@dev",
            
    "contao/faq-bundle""4.9.*",
            
    "contao/listing-bundle""4.9.*",
            
    "contao/manager-bundle""4.9.*",
            
    "contao/news-bundle""4.9.*",
            
    "contao/newsletter-bundle""4.9.*",
            
    "heimseiten/contao-sticky-footer-backend-bundle""^1.0",
            
    "madeyourday/contao-rocksolid-antispam""^2.0",
            
    "numero2/contao-marketing-suite""^1.0"
        
    },
        
    "extra": {
            
    "contao-component-dir""assets"
        
    },
        
    "scripts": {
            
    "post-install-cmd": [
                
    "Contao\\ManagerBundle\\Composer\\ScriptHandler::initializeApplication"
            
    ],
            
    "post-update-cmd": [
                
    "Contao\\ManagerBundle\\Composer\\ScriptHandler::initializeApplication"
            
    ]
        },
        
    "autoload": {
            
    "psr-4": { "TextFmBundle\\""src/TextFmBundle/" },
            
    "classmap": ["app/ContaoManagerPlugin.php"]
        }

    TextFmBundle/Controller/ContentElement/TextFmController.php
    PHP-Code:
    <?php
    namespace TextFmBundle\Controller\ContentElement;

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

    /**
     * @ContentElement("text_fm",
     *      category="texts",
     * )
     */
    class TextFmController extends AbstractContentElementController
    {
        protected function 
    getResponse(Template $templateContentModel $modelRequest $request): ?Response
        
    {
            
    $template->text $model->text;
            
            return 
    $template->getResponse();
        }
    }
    TextFmBundle/TextFmBundle.php
    PHP-Code:
    <?php

    namespace TextFmBundle;

    use 
    Symfony\Component\HttpKernel\Bundle\Bundle;

    class 
    TextFmBundle extends Bundle
    {
    }
    TextFmBundle/Resources/config/routing.yml
    PHP-Code:
    app:
        
    resource"@TextFmBundle/Controller"
        
    typeannotation 
    TextFmBundle/Resources/config/services.yml
    PHP-Code:
    services:
        @
    TextFmBundle\Controller\ContentElement\TextFmController:
            
    tags:
                -
                    
    namecontao.content_element
                    category
    texts
                    template
    ce_text_fm 
    TextFmBundle/Resources/contao/dca/tl_content.php
    PHP-Code:
    <?php
    $GLOBALS
    ['TL_DCA']['tl_content']['palettes']['text_fm'] = '
    {type_legend},type;
    {text_legend},text;
    {image_legend},addImage;
    {protected_legend:hide},protected;
    {invisible_legend:hide},invisible,start,stop;'
    ;
    ...das composer update im Contao-Manager läuft so mal durch, aber im Backend erscheint das Ding nicht in der Auswahl bei "Elementtyp"

  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 zonky Beitrag anzeigen
    Wenn es den Ordner src/AppBundle/Resources gibt, kannst Du nicht mit den Annotations arbeiten sondern packst die Sachen in die service.yml
    Doch natürlich kann man mit Annotations arbeiten (egal wo). Alles was du dafür brauchst ist autoconfigure: true. Siehe auch https://github.com/terminal42/service-annotation-bundle
    » sponsor me via GitHub or PayPal or Revolut

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

    Standard

    @mikefmmedia du musst dich entscheiden ob du die Service Tags selbst setzen willst - oder Annotations nutzen willst (aktuell versuchst du es gemischt). Falls du nur annotations nutzen willst, dann zB:
    PHP-Code:
    services:
        
    TextFmBundle\Controller\ContentElement\TextFmController:
            
    autoconfiguretrue 
    » sponsor me via GitHub or PayPal or Revolut

  6. #6
    Contao-Nutzer
    Registriert seit
    02.04.2021.
    Beiträge
    68

    Standard

    Hi @Spooky, habe die services.yml auf deine Version geändert, composer-update und Cache gelöscht, aber es Zeigt mir noch nichts an im Backend.

    Es scheint als ob meine src/TextFmBundle/Resources/contao/dca/tl_content.php ignoriert wird.

    Brauche ich da die von dir erwähnte Extension oder kann das Contao 4.9 selber?

  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

    Das Paket wird bereits von Contao required.

    Bzgl. deinem Problem: dir fehlt noch die Dependency Injection Extension: https://docs.contao.org/dev/getting-...-configuration - also deine services.yaml wird aktuell vermutlich noch gar nicht geladen.
    » sponsor me via GitHub or PayPal or Revolut

  8. #8
    Contao-Nutzer
    Registriert seit
    02.04.2021.
    Beiträge
    68

    Daumen hoch

    Ah super, jetzt funktioniert es, Danke!

    Hab das Grundgerüst hier abgelegt, falls es mal wer braucht. https://github.com/mike-tuxedo/conta...ment-appbundle

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

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Doch natürlich kann man mit Annotations arbeiten (egal wo). Alles was du dafür brauchst ist autoconfigure: true. Siehe auch https://github.com/terminal42/service-annotation-bundle
    dazu hatte ich doch letztes Jahr mal ein Ticket angelegt... finde das nicht mehr

    Das Problem war, dass beim Einlesen des Ordners von src/AppBundle/ der Unterordner Resources/ nicht erfasst wurde - ich meine damit nicht, dass es ein Problem gibt, wenn der unter contao/ steckt - aber das sollte vermieden werden, wenn ich das Eingangsposting richtig verstanden habe

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

    Standard

    Services musst du in einem Bundle immer selbst registrieren (also die services.yaml laden lassen). Nur für die App macht das die Contao Managed Edition automatisch für dich.
    » sponsor me via GitHub or PayPal or Revolut

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
  •