Ergebnis 1 bis 9 von 9

Thema: Backend Template Anpassung

  1. #1
    Community-Moderator & Contao-Urgestein Avatar von derRenner
    Registriert seit
    23.10.2012.
    Ort
    hoRn|waldviertel
    Beiträge
    2.861
    Contao-Projekt unterstützen

    Support Contao

    Standard Backend Template Anpassung

    Hallo,

    in einer Erweiterung möchte ich das Backendtemplate anpassen - leider wird mir die Anpassung nicht angezeigt.

    PHP-Code:
    <?php

    // src/Controller/ContentElement/DividerController.php

    declare(strict_types=1);

    namespace 
    Berecont\ContaoDividerBundle\Controller\ContentElement;

    use 
    Contao\BackendTemplate;
    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;

    /**
     * Class DividerController
     *
     * @ContentElement(DividerController::TYPE, category="werbepanorama", template="ce_divider")
     */
    class DividerController extends AbstractContentElementController
    {
        public const 
    TYPE 'divider';

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

        }

        public function 
    generate()
        {
            if (
    TL_MODE === 'BE') {
                
    $template = new \BackendTemplate('be_wildcard');
                
    $template->wildcard '### Trennlinie ' $template->dividerWidth ' ###';

                return 
    $template->parse();
            }

            return 
    parent::generate();
        }
    }
    Muss ich an anderer Stelle noch eine Einstellung vornehmen?
    Wo liegt mein Fehler?
    Vielen Dank für die Hilfestellung
    Grüsse
    Bernhard


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

    Standard

    Statt TL_MODE solltest du den ScopeMatcher verwenden:
    PHP-Code:
    namespace App\Controller\ContentElement;

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

    /**
     * @ContentElement(category="texts")
     */
    class MyContentElementController extends AbstractContentElementController
    {
        private 
    $scopeMatcher;

        public function 
    __construct(ScopeMatcher $scopeMatcher)
        {
            
    $this->scopeMatcher $scopeMatcher;
        }

        protected function 
    getResponse(Template $templateContentModel $modelRequest $request): ?Response
        
    {
            if (
    $this->scopeMatcher->isBackendRequest($request)) {
                
    $template = new BackendTemplate('be_wildcard');
                
    $template->wildcard '### FOOBAR ###';

                return new 
    Response($template->parse());
            }

            
    // …
            
            
    return new Response($template->parse());
        }

    » sponsor me via GitHub or PayPal or Revolut

  3. #3
    Community-Moderator & Contao-Urgestein Avatar von derRenner
    Registriert seit
    23.10.2012.
    Ort
    hoRn|waldviertel
    Beiträge
    2.861
    Contao-Projekt unterstützen

    Support Contao

    Standard

    will bei mir nicht
    angemeckert wird public function __construct(ScopeMatcher $scopeMatcher)

    Fehler im Backend - DebugMode:
    PHP-Code:
    Too few arguments to function Berecont\ContaoDividerBundle\Controller\ContentElement\DividerController::__construct(), 0 passed in C:\laragon\www\dev411\var\cache\dev\ContainerMAgjD5U\getContao_Fragment_Contao_ContentElement_DividerService.php on line 28 and exactly 1 expected 
    Stack Trace
    PHP-Code:
    ArgumentCountError:
    Too few arguments to function Berecont\ContaoDividerBundle\Controller\ContentElement\DividerController::__construct(), 0 passed in C:\laragon\www\dev411\var\cache\dev\ContainerMAgjD5U\getContao_Fragment_Contao_ContentElement_DividerService.php on line 28 and exactly 1 expected

      at C
    :\laragon\www\dev411\vendor\berecont\contao-divider-bundle\src\Controller\ContentElement\DividerController.php:36
      at Berecont
    \ContaoDividerBundle\Controller\ContentElement\DividerController->__construct()
         (
    C:\laragon\www\dev411\var\cache\dev\ContainerMAgjD5U\getContao_Fragment_Contao_ContentElement_DividerService.php:28)
      
    at ContainerMAgjD5U\getContao_Fragment_Contao_ContentElement_DividerService::do(object(appContao_ManagerBundle_HttpKernel_ContaoKernelDevDebugContainer), true)
         (
    C:\laragon\www\dev411\var\cache\dev\ContainerMAgjD5U\appContao_ManagerBundle_HttpKernel_ContaoKernelDevDebugContainer.php:690)
      
    at ContainerMAgjD5U\appContao_ManagerBundle_HttpKernel_ContaoKernelDevDebugContainer->load('getContao_Fragment_Contao_ContentElement_DividerService.php')
         (
    C:\laragon\www\dev411\vendor\symfony\dependency-injection\Container.php:237)
      
    at Symfony\Component\DependencyInjection\Container->make('contao.fragment._contao.content_element.divider'1)
         (
    C:\laragon\www\dev411\vendor\symfony\dependency-injection\Container.php:219)
      
    at Symfony\Component\DependencyInjection\Container->get('contao.fragment._contao.content_element.divider')
         (
    C:\laragon\www\dev411\vendor\symfony\http-kernel\Controller\ContainerControllerResolver.php:53)
      
    at Symfony\Component\HttpKernel\Controller\ContainerControllerResolver->instantiateController('contao.fragment._contao.content_element.divider')
         (
    C:\laragon\www\dev411\vendor\symfony\framework-bundle\Controller\ControllerResolver.php:70)
      
    at Symfony\Bundle\FrameworkBundle\Controller\ControllerResolver->instantiateController('contao.fragment._contao.content_element.divider')
         (
    C:\laragon\www\dev411\vendor\symfony\http-kernel\Controller\ControllerResolver.php:110)
      
    at Symfony\Component\HttpKernel\Controller\ControllerResolver->createController('contao.fragment._contao.content_element.divider')
         (
    C:\laragon\www\dev411\vendor\symfony\http-kernel\Controller\ContainerControllerResolver.php:42)
      
    at Symfony\Component\HttpKernel\Controller\ContainerControllerResolver->createController('contao.fragment._contao.content_element.divider')
         (
    C:\laragon\www\dev411\vendor\symfony\framework-bundle\Controller\ControllerResolver.php:62)
      
    at Symfony\Bundle\FrameworkBundle\Controller\ControllerResolver->createController('contao.fragment._contao.content_element.divider')
         (
    C:\laragon\www\dev411\vendor\symfony\http-kernel\Controller\ControllerResolver.php:86)
      
    at Symfony\Component\HttpKernel\Controller\ControllerResolver->getController(object(Request))
         (
    C:\laragon\www\dev411\vendor\symfony\http-kernel\Controller\TraceableControllerResolver.php:38)
      
    at Symfony\Component\HttpKernel\Controller\TraceableControllerResolver->getController(object(Request))
         (
    C:\laragon\www\dev411\vendor\contao\core-bundle\src\HttpKernel\ControllerResolver.php:53)
      
    at Contao\CoreBundle\HttpKernel\ControllerResolver->getController(object(Request))
         (
    C:\laragon\www\dev411\vendor\symfony\http-kernel\HttpKernel.php:141)
      
    at Symfony\Component\HttpKernel\HttpKernel->handleRaw(object(Request), 2)
         (
    C:\laragon\www\dev411\vendor\symfony\http-kernel\HttpKernel.php:80)
      
    at Symfony\Component\HttpKernel\HttpKernel->handle(object(Request), 2false)
         (
    C:\laragon\www\dev411\vendor\symfony\http-kernel\HttpCache\SubRequestHandler.php:85)
      
    at Symfony\Component\HttpKernel\HttpCache\SubRequestHandler::handle(object(HttpKernel), object(Request), 2false)
         (
    C:\laragon\www\dev411\vendor\symfony\http-kernel\Fragment\InlineFragmentRenderer.php:81)
      
    at Symfony\Component\HttpKernel\Fragment\InlineFragmentRenderer->render('/_fragment?_path=_format%3Dhtml%26_locale%3Dde%26_controller%3Dcontao.content_element.divider'object(Request), array('ignore_errors' => false))
         (
    C:\laragon\www\dev411\vendor\symfony\http-kernel\Fragment\FragmentHandler.php:85)
      
    at Symfony\Component\HttpKernel\Fragment\FragmentHandler->render(object(ContentElementReference), 'forward', array('ignore_errors' => false))
         (
    C:\laragon\www\dev411\vendor\contao\core-bundle\src\Fragment\FragmentHandler.php:84)
      
    at Contao\CoreBundle\Fragment\FragmentHandler->render(object(ContentElementReference))
         (
    C:\laragon\www\dev411\vendor\contao\core-bundle\src\Resources\contao\elements\ContentProxy.php:61)
      
    at Contao\ContentProxy->generate()
         (
    C:\laragon\www\dev411\vendor\contao\core-bundle\src\Resources\contao\library\Contao\Controller.php:595)
      
    at Contao\Controller::getContentElement(object(ContentModel))
         (
    C:\laragon\www\dev411\vendor\contao\core-bundle\src\Resources\contao\dca\tl_content.php:1309)
      
    at tl_content->addCteType(array('id' => '27''type' => 'divider''pid' => '1''ptable' => 'tl_article''sorting' => '32''tstamp' => '1638906810''headline' => 'a:2:{s:4:"unit";s:2:"h2";s:5:"value";s:0:"";}''text' => null'addImage' => '''inline' => '''overwriteMeta' => '''singleSRC' => null'alt' => '''imageTitle' => '''size' => '''imagemargin' => '''imageUrl' => '''fullsize' => '''caption' => '''floating' => 'above''html' => null'listtype' => '''listitems' => null'tableitems' => null'summary' => '''thead' => '''tfoot' => '''tleft' => '''sortable' => '''sortIndex' => '0''sortOrder' => 'ascending''mooHeadline' => '''mooStyle' => '''mooClasses' => '''highlight' => '''code' => null'url' => '''target' => '''overwriteLink' => '''titleText' => '''linkTitle' => '''embed' => '''rel' => '''useImage' => '''multiSRC' => null'orderSRC' => null'useHomeDir' => '''perRow' => '4''perPage' => '0''numberOfItems' => '0''sortBy' => '''metaIgnore' => '''galleryTpl' => '''customTpl' => '''playerSRC' => null'youtube' => '''vimeo' => '''posterSRC' => null'playerSize' => '''playerOptions' => null'playerStart' => '0''playerStop' => '0''playerCaption' => '''playerAspect' => '''splashImage' => '''playerPreload' => '''playerColor' => '''youtubeOptions' => null'vimeoOptions' => null'sliderDelay' => '0''sliderSpeed' => '300''sliderStartSlide' => '0''sliderContinuous' => '''cteAlias' => '0''articleAlias' => '0''article' => '0''form' => '0''module' => '0''protected' => '''groups' => null'guests' => '''cssID' => 'a:2:{i:0;s:0:"";i:1;s:0:"";}''invisible' => '''start' => '''stop' => '''com_order' => 'ascending''com_perPage' => '0''com_moderate' => '''com_bbcode' => '''com_disableCaptcha' => '''com_requireLogin' => '''com_template' => '''cssClasses' => '''markdownSource' => 'sourceText''toolbox_classes' => null'grid_options' => null'grid_columns' => null'dividerIconTotop' => '1''dividerIconbgOutline' => '1''dividerIconbg' => '''dividerIcon' => 'e03d''dividerAddIcon' => '1''dividerWidth' => 'dividerFull''dividerStyle' => 'dividerCenter''searchclass' => ''))
         (
    C:\laragon\www\dev411\vendor\contao\core-bundle\src\Resources\contao\drivers\DC_Table.php:4576)
      
    at Contao\DC_Table->parentView()
         (
    C:\laragon\www\dev411\vendor\contao\core-bundle\src\Resources\contao\drivers\DC_Table.php:350)
      
    at Contao\DC_Table->showAll()
         (
    C:\laragon\www\dev411\vendor\contao\core-bundle\src\Resources\contao\classes\Backend.php:648)
      
    at Contao\Backend->getBackendModule('article'null)
         (
    C:\laragon\www\dev411\vendor\contao\core-bundle\src\Resources\contao\controllers\BackendMain.php:167)
      
    at Contao\BackendMain->run()
         (
    C:\laragon\www\dev411\vendor\contao\core-bundle\src\Controller\BackendController.php:49)
      
    at Contao\CoreBundle\Controller\BackendController->mainAction()
         (
    C:\laragon\www\dev411\vendor\symfony\http-kernel\HttpKernel.php:158)
      
    at Symfony\Component\HttpKernel\HttpKernel->handleRaw(object(Request), 1)
         (
    C:\laragon\www\dev411\vendor\symfony\http-kernel\HttpKernel.php:80)
      
    at Symfony\Component\HttpKernel\HttpKernel->handle(object(Request), 1true)
         (
    C:\laragon\www\dev411\vendor\symfony\http-kernel\Kernel.php:201)
      
    at Symfony\Component\HttpKernel\Kernel->handle(object(Request))
         (
    C:\laragon\www\dev411\web\index.php:31
    src/Controller/ContentElement/DividerController.php:
    PHP-Code:
    <?php

    declare(strict_types=1);

    namespace 
    Berecont\ContaoDividerBundle\Controller\ContentElement;

    use 
    Contao\BackendTemplate;
    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;

    /**
     * Class DividerController
     *
     * @ContentElement(DividerController::TYPE, category="werbepanorama", template="ce_divider")
     */
    class DividerController extends AbstractContentElementController
    {
        public const 
    TYPE 'divider';

        private 
    $scopeMatcher;

        public function 
    __construct(ScopeMatcher $scopeMatcher)
        {
            
    $this->scopeMatcher $scopeMatcher;
        }

        protected function 
    getResponse(Template $templateContentModel $modelRequest $request): ?Response
        
    {
            if (
    $this->scopeMatcher->isBackendRequest($request)) {
                
    $template = new BackendTemplate('be_wildcard');
                
    $template->wildcard '### Trennlinie ' $template->dividerWidth ' ###';

                return new 
    Response($template->parse());
            }

            
    $template->dividerWidth $model->dividerWidth;
            
    $template->dividerAddIcon $model->dividerAddIcon;
            
    $template->dividerStyle $model->dividerStyle;
            
    $template->dividerIcon $model->dividerIcon;
            
    $template->dividerIconbg $model->dividerIconbg;
            
    $template->dividerIconbgOutline $model->dividerIconbgOutline;

            
    $cssClasses = [
                
    $template->dividerWidth,
                
    $template->dividerStyle,
                
    $template->dividerIconbg,
            ];
            if (
    $template->dividerIconbgOutline) {
                
    $cssClasses[] = 'dividerBorder';
            };

            if (
    $template->dividerAddIcon) {
                
    $cssClass implode(' ',$cssClasses);

                
    $template->cssClass $cssClass;

                
    $template->class .= ' '.$cssClass;
            };
            

            return new 
    Response($template->parse());
        }


    }
    Grüsse
    Bernhard


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

    Standard

    Zitat Zitat von derRenner Beitrag anzeigen
    will bei mir nicht
    angemeckert wird public function __construct(ScopeMatcher $scopeMatcher)

    Fehler im Backend - DebugMode:
    PHP-Code:
    Too few arguments to function Berecont\ContaoDividerBundle\Controller\ContentElement\DividerController::__construct(), 0 passed in C:\laragon\www\dev411\var\cache\dev\ContainerMAgjD5U\getContao_Fragment_Contao_ContentElement_DividerService.php on line 28 and exactly 1 expected 
    Der Beispielcode von mir ist für eine Applikationsanpassung, wo du dich nicht selbst um Dependency Injection kümmern musst. In deinem Bundle musst du das schon - oder zumindest dediziert Autowiring aktivieren. Wie sieht deine Service Definition aus?
    » sponsor me via GitHub or PayPal or Revolut

  5. #5
    Community-Moderator & Contao-Urgestein Avatar von derRenner
    Registriert seit
    23.10.2012.
    Ort
    hoRn|waldviertel
    Beiträge
    2.861
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Wie sieht deine Service Definition aus?
    meinest du Resources/config/services.yml?
    PHP-Code:
    services:

        
    # Contao content element Berecont\ContaoDividerBundle\Controller\ContentElement\DividerController
        # We used annotations for tagging the frontend element category, the frontend element type and the frontend element template
        
    Berecont\ContaoDividerBundle\Controller\ContentElement\DividerController:
            
    tags:
                - { 
    namecontainer.service_subscriber }
            public: 
    true
            
    # Since Symfony 5 the container has to be set manually
            
    calls:
                - [ 
    setContainer, [ '@Psr\Container\ContainerInterface' ] ] 
    Ich möchte an dieser Stelle vermerken, dass ich über die Erweiterung [markocupic/contao-bundle-creator-bundle] arbeite und hier wiederum mit den dabei entstandenen Dateien.
    Grüsse
    Bernhard


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

    Standard

    Ein paar Anmerkungen dazu:

    • Du hast deinen Service mit container.service_subscriber getagged, hast aber gar keine Services subscribed. Das kannst du entfernen.
    • Du lässt den Container setzen, das brauchst du aber auch nicht, weil du diesen nicht (direkt) benutzt.
    • Dein Konstruktor verlangt momentan nach dem ScopeMatcher Service, das hast du in deiner Service Definition noch nicht eingefügt. Alternativ kannst du auch autowiring für den Service aktivieren, dann musst du das nicht manuell machen.
    » sponsor me via GitHub or PayPal or Revolut

  7. #7
    Community-Moderator & Contao-Urgestein Avatar von derRenner
    Registriert seit
    23.10.2012.
    Ort
    hoRn|waldviertel
    Beiträge
    2.861
    Contao-Projekt unterstützen

    Support Contao

    Standard

    meine service.yml sieht nun so aus - Error bleibt
    PHP-Code:
    services:

        
    # Contao content element Berecont\ContaoDividerBundle\Controller\ContentElement\DividerController
        # We used annotations for tagging the frontend element category, the frontend element type and the frontend element template
        
    Berecont\ContaoDividerBundle\Controller\ContentElement\DividerController:
            public: 
    true
            autowire
    true 
    Ich hätte auch versucht ein use Contao\CoreBundle\Routing\ScopeMatcher; in der DividerController.php einzufügen - auch erfolglos.


    Wenn mein Fehler einfach zu eruieren ist, dann würde ich hier weiter machen - ansonsten ignoriere ich hier mal die Möglichkeit das Backend angepasst angezeigt zu bekommen
    Grüsse
    Bernhard


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

    Standard

    Statt public: true nimm autoconfigure: true. Hast du danach composer install ausgeführt?
    » sponsor me via GitHub or PayPal or Revolut

  9. #9
    Community-Moderator & Contao-Urgestein Avatar von derRenner
    Registriert seit
    23.10.2012.
    Ort
    hoRn|waldviertel
    Beiträge
    2.861
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Auch dieses Problem konnte gelöst werden.

    Ich musste auch zusätzlich noch use Contao\CoreBundle\Routing\ScopeMatcher; mit in die Datei DividerController.php einfügen.

    PHP-Code:
    <?php

    // src/Controller/ContentElement/DividerController.php

    declare(strict_types=1);

    namespace 
    Berecont\ContaoDividerBundle\Controller\ContentElement;

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

    /**
     * Class DividerController
     *
     * @ContentElement(DividerController::TYPE, category="werbepanorama", template="ce_divider")
     */
    class DividerController extends AbstractContentElementController
    {
        public const 
    TYPE 'divider';

        private 
    $scopeMatcher;

        public function 
    __construct(ScopeMatcher $scopeMatcher)
        {
            
    $this->scopeMatcher $scopeMatcher;
        }

        
    /**
         * Generate the content element
         */

        
    protected function getResponse(Template $templateContentModel $modelRequest $request): ?Response
        
    {
            if (
    $this->scopeMatcher->isBackendRequest($request)) {
                
    $template = new BackendTemplate('be_wildcard');
                
    $template->wildcard '### Trennlinie ###';
                if (
    $model->dividerAddIcon) {
                    
    $template->title $GLOBALS['TL_LANG']['tl_content']['dividerWidthOptions'][$model->dividerWidth] . ' | ' $GLOBALS['TL_LANG']['tl_content']['dividerStyleOptions'][$model->dividerStyle];
                } else {
                    
    $template->title $GLOBALS['TL_LANG']['tl_content']['dividerWidthOptions'][$model->dividerWidth];
                };

                return new 
    Response($template->parse());
            }

            
    $template->dividerWidth $model->dividerWidth;
            
    $template->dividerAddIcon $model->dividerAddIcon;
            
    $template->dividerStyle $model->dividerStyle;
            
    $template->dividerIcon $model->dividerIcon;
            
    $template->dividerIconbg $model->dividerIconbg;
            
    $template->dividerIconbgOutline $model->dividerIconbgOutline;

            
    $cssClasses = [
                
    $template->dividerWidth,
                
                
            ];
            if (
    $template->dividerAddIcon) {  
                
    $cssClasses[] = $template->dividerStyle;
                
    $cssClasses[] = $template->dividerIconbg;
                if (
    $template->dividerIconbgOutline) {
                    
    $cssClasses[] = 'dividerBorder';
                };
            };    

                
    $cssClass implode(' ',$cssClasses);

                
    $template->cssClass $cssClass;

                
    $template->class .= ' '.$cssClass;

            

            return new 
    Response($template->parse());
        }


    }
    services.yml
    PHP-Code:
    services:

        
    # Contao content element Berecont\ContaoDividerBundle\Controller\ContentElement\DividerController
        # We used annotations for tagging the frontend element category, the frontend element type and the frontend element template
        
    Berecont\ContaoDividerBundle\Controller\ContentElement\DividerController:
            
    autoconfiguretrue
            autowire
    true 
    vielen DANK für die Hilfestellung
    Grüsse
    Bernhard


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
  •