Contao-Camp 2024
Seite 2 von 2 ErsteErste 12
Ergebnis 41 bis 67 von 67

Thema: Ausgabe von Content Elementen

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

    Standard

    Zitat Zitat von waldo Beitrag anzeigen
    Stimmt! Wie müsste diese denn aussehen?
    Das weißt nur du, denn wir wissen ja nicht, was du überhaupt mit diesem Inhaltselement vor hast .

  2. #42
    Contao-Nutzer
    Registriert seit
    02.12.2017.
    Beiträge
    138

    Standard

    Gibt es etwas, woran ich mich orientieren kann?
    Im Prinzip möchte ich ja "nur" alle Elemente, die ich im Backend dann ausgefüllt habe, ausgeben.

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

    Standard

    Naja, sieh dir das ContentText Element des Cores zB an. Oder etwas anderes einfaches.

  4. #44
    Contao-Nutzer
    Registriert seit
    02.12.2017.
    Beiträge
    138

    Standard

    Hast du vielleicht noch eine Idee zur Wildcard?

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

    Standard

    Ich könnte nocheinmal etwas Hilfe gebrauchen.
    Ich bin gerade, nach einer etwas längeren Pause, wieder an meiner Erweiterung dran.

    Allerdings scheint die Klasse für das ContentElement nicht richtig geladen zu werden. Bisher bin ich auf den Fehler leider noch nicht gestoßen.
    Könnt ihr mir hier evtl. weiterhelfen?

    Meine ContentElement Klasse sieht aktuell so aus (liegt in "/src/TestBundle/ContentElement/ProductList.php"):

    PHP-Code:
    <?php
    namespace TestBundle\ContentElement;

    class 
    ProductList extends \ContentElement {
        
    /**
         * Template
         * @var string
         */
        
    protected $strTemplate 'ce_productlist';
        
    /**
         * Generate the content element
         */

        
    protected function compile() {
        if (
    TL_MODE == 'BE') {
          
    $this->genBeOutput();
        } else {
          
    $this->genFeOutput();
        }
      }

      private function 
    genBeOutput(){
        
    $this->strTemplate          'be_wildcard';
        
    $this->Template             = new \BackendTemplate($this->strTemplate);
        
    $this->Template->title      $this->headline;
        
    $this->Template->wildcard   "### ContentProduct ###";
      }

        private function 
    genFeOutput(){
                if (
    $this->productproperties != '') {
                        
    $this->Template->arrProperties deserialize($this->productpropertiestrue);
                }
        }


    }

    class_alias(ProductList::class, 'ProductList');
    In der config lade ich das ganze wie folgt (liegt in "/src/TestBundle/Resources/contao/config/config.php")

    PHP-Code:

    <?php
    // Content Elements
    $GLOBALS['TL_CTE']['texts']['ProductList'] = \TestBundle\ContentElement\ProductList::class;
    ?>
    Den entsprechenden Eintrag habe ich im DCA vorgenommen. Das ganze wird auch im Backend angezeigt. Allerdings wird das Template, welches ich erstellt habe (in "/src/TestBundle/Resources/contao/templates/elements/ce_productlist.html5"), nicht geladen bzw. nicht im ContentElement angezeigt und auch die Wildcard wird nicht angezeigt. Ich habe den Eindruck, dass die ContentElement-Klasse garnicht erst geladen wird.

    Seht ihr hier einen Fehler meinerseits?

  6. #46
    Contao-Urgestein Avatar von Toflar
    Registriert seit
    15.06.2009.
    Beiträge
    4.467
    Partner-ID
    8667
    User beschenken
    Wunschliste

    Standard

    Wie sieht die Composer Autoload-Definition aus?
    Contao Core-Entwickler @terminal42 gmbh
    Wir sind Contao Premium-Partner!
    Für Individuallösungen kannst du uns gerne kontaktieren.
    PS: Heute schon getrakked?

  7. #47
    Contao-Nutzer
    Registriert seit
    02.12.2017.
    Beiträge
    138

    Standard

    Der Autoload sieht bei mir folgendermaßen aus:

    Code:
        "autoload": {
            "psr-4": {
                "": "src/"
            }
        }
    Die Integration des DCA usw. funktioniert problemlos, nur eben wird scheinbar die ContentElement-Klasse nicht geladen

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

    Standard

    Naja, wenn du schreibst, dass das Inhaltselement im Backend verfügbar ist, wird es auch geladen

  9. #49
    Contao-Nutzer
    Registriert seit
    02.12.2017.
    Beiträge
    138

    Standard

    Das Inhaltselement wird ja auch richtig durch die config geladen.
    Aber die ContentElement.php scheint keinerlei auswirkungen zu haben.
    Das Template wird nicht zugeordnet und auch die Wildcard funktioniert beispielsweise nicht

  10. #50
    Contao-Urgestein Avatar von fiedsch
    Registriert seit
    09.07.2009.
    Ort
    München
    Beiträge
    2.941

    Standard

    Der Code dazu steht bei Dir in der compile(). Gehört das nicht in die generate()?
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

  11. #51
    Contao-Nutzer
    Registriert seit
    02.12.2017.
    Beiträge
    138

    Standard

    Das hatte ich zuvor auch in der generate, ich hatte teilweise auch varianten mit der compile gesehen. Leider beides mit dem selben Ergebnis.

  12. #52
    Contao-Urgestein Avatar von Toflar
    Registriert seit
    15.06.2009.
    Beiträge
    4.467
    Partner-ID
    8667
    User beschenken
    Wunschliste

    Standard

    Was ergibt denn ein
    PHP-Code:
    class_exists(\TestBundle\ContentElement\ProductList::class); 
    ?
    Müsste ja false sein, wenn sie wirklich nicht geladen wird, was auf eine falsche Autoload-Definition oder ein fehlendes "composer dump-autoload" hinweisen würde.
    Contao Core-Entwickler @terminal42 gmbh
    Wir sind Contao Premium-Partner!
    Für Individuallösungen kannst du uns gerne kontaktieren.
    PS: Heute schon getrakked?

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

    Standard

    Soweit ich ihn verstehe wurde die Klasse geladen und er konnte das Inhaltselement auch anlegen - nur die Ausgabe funktioniert nicht.

  14. #54
    Contao-Nutzer
    Registriert seit
    02.12.2017.
    Beiträge
    138

    Standard

    Richtig, das Inhaltselement kann ich anlegen und speichern.
    Mir wird im Inhaltselement in der Templateauswahl jedoch das in der ContentElement.php zugeordnete Template 'ce_productlist' nicht in der Auswahl angezeigt.
    Die Wildcard wurde ebenfalls nicht angezeigt.

    Ich weiß zwar nicht, was genau ich jetzt anders gemacht habe, aber die Wildcard wird jetzt korrekt angezeigt.
    Also wird die ContentElement-Klasse ja nun definitiv geladen.
    Aber wieso erscheint das Template nicht in der Auswahl?

    Das ist jetzt die aktuelle ContentElement-Datei:
    PHP-Code:
    <?php

    namespace TestBundle\ContentElement;

    class 
    ProductList extends \ContentElement {
        
    /**
         * Template
         * @var string
         */
        
    protected $strTemplate 'ce_productlist';
        
    /**
         * Generate the content element
         */

        
    protected function compile() {
        if (
    TL_MODE == 'BE') {
          
    $this->genBeOutput();
        } else {
          
    $this->genFeOutput();
        }

      }

      private function 
    genBeOutput(){
        
    $this->strTemplate          'be_wildcard';
        
    $this->Template             = new \BackendTemplate($this->strTemplate);
        
    $this->Template->title      $this->headline;
        
    $this->Template->wildcard   "### ContentProduct ###";
      }

        private function 
    genFeOutput(){
                if (
    $this->productproperties != '') {
                        
    $this->Template->arrProperties deserialize($this->productpropertiestrue);
                }
        }

    }

    class_alias(ProductList::class, 'ProductList');
    Geändert von waldo (15.05.2019 um 10:08 Uhr)

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

    Standard

    generate() ist falsch, denke ich, zumindest so wie du das jetzt hast. In generate() musst du einen String zurückgeben.

  16. #56
    Contao-Nutzer
    Registriert seit
    02.12.2017.
    Beiträge
    138

    Standard

    Stimmt, musste es gerade auf compile() ändern, bei der generate hatte er auch gemeckert.
    Aber das Templateproblem bleibt

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

    Standard

    Ich denke das Problem ist, dass du
    PHP-Code:
    $GLOBALS['TL_CTE']['texts']['ProductList'
    geschrieben hast, statt
    PHP-Code:
    $GLOBALS['TL_CTE']['texts']['productlist'

  18. #58
    Contao-Nutzer
    Registriert seit
    02.12.2017.
    Beiträge
    138

    Standard

    Das wars leider nicht, damit läd er dann die ganze Klasse nicht mehr.

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

    Standard

    Was meinst du damit?

    Poste mal den gesamten Code.

  20. #60
    Contao-Nutzer
    Registriert seit
    02.12.2017.
    Beiträge
    138

    Standard

    Damit habe ich das gleiche Problem wie anfangs, dass weder die Wildcard angezeigt wird, noch das Template.

    Meine ContentElement-Klasse sieht nun so aus (gleiche es gerade etwas daran an, wie ich es im Contao Core finde):
    /src/TestBundle/ContentElement/ProductList.php

    PHP-Code:
    <?php
    namespace TestBundle\ContentElement;

    class 
    ProductList extends \ContentElement {
        
    /**
         * Template
         * @var string
         */
        
    protected $strTemplate 'ce_productlist';
        
    /**
         * Generate the content element
         */

        
    public function generate() {
        if (
    TL_MODE == 'BE') {
          
    $this->genBeOutput();
        } else {
          
    $this->genFeOutput();
        }

            return 
    parent::generate();

      }

      private function 
    genBeOutput(){
      
    //  $this->strTemplate          = 'be_wildcard';
        
    $this->Template             = new \BackendTemplate($this->strTemplate);
        
    $this->Template->title      $this->headline;
        
    $this->Template->wildcard   "### ContentProduct ##";

            return 
    $this->Template->parse();
      }

        private function 
    genFeOutput(){
                if (
    $this->productproperties != '') {
                        
    $this->Template->arrProperties deserialize($this->productpropertiestrue);
                }
        }

        protected function 
    compile(){
        }

    }

    class_alias(ProductList::class, 'ProductList');
    Die config sieht bei mir insgesamt so aus:
    /src/TestBundle/Resources/contao/config/config.php

    PHP-Code:
    <?php

    // Content Elements
    $GLOBALS['TL_CTE']['texts']['ProductList'] = \TestBundle\ContentElement\ProductList::class;

    // Backend Modules
    array_insert($GLOBALS['BE_MOD'],1,array(
      
    'test' => array(
        
    'products' => array(
          
    'tables' => array('tl_testproducts')//,
        
    ),
        
    'categories' => array(
          
    'tables' => array('tl_testcategories')
        )
      )
    ));

    // Models
    $GLOBALS['TL_MODELS']['tl_testproducts'] = 'ProductModel';
    $GLOBALS['TL_MODELS']['tl_testcategories'] = 'CategoryModel';
    Der DCA für das ContentElement:
    /src/TestBundle/Resources/contao/dca/tl_content.php

    PHP-Code:
    <?php

    // Palettes
    $GLOBALS['TL_DCA']['tl_content']['palettes']['ProductList'] = '{type_legend},type,headline;{template_legend:hide},customTpl;{protected_legend:hide},protected;{expert_legend:hide},guests,cssID;{invisible_legend:hide},invisible,start,stop';

    Und die Template-Datei (erstmal nur irgendwo her kopiert, konnte dies ja noch nicht testen):
    /src/TestBundle/Resources/contao/templates/ce_productlist.html5

    PHP-Code:
    <?php $this->extend('block_searchable'); ?>

    <?php $this->block('content'); ?>

    Hello World

    <?php $this->endblock(); ?>


    Ansonsten die BundleDatei:
    /src/TestBundle/TestBundle.php

    PHP-Code:
    <?php


    use Symfony\Component\HttpKernel\Bundle\Bundle;

    class 
    TestBundle extends Bundle
    {
    }
    Und die ContaoManagerPlugin Datei:
    /src/ContaoManagerPlugin.php

    PHP-Code:
    <?php

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

    class 
    ContaoManagerPlugin implements BundlePluginInterface
    {
        public function 
    getBundles(ParserInterface $parser)
        {
            return [
                
    BundleConfig::create(TestBundle::class)->setLoadAfter([ContaoCoreBundle::class]
                )
            ];
        }
    }

  21. #61
    Contao-Nutzer
    Registriert seit
    02.12.2017.
    Beiträge
    138

    Standard

    Mir fällt gerade auf, dass das "Hello World" aus dem Template in meiner Wildcard angezeigt wird...
    Was ist denn da passiert ?

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

    Standard

    Wie gesagt, ich denke du musst
    PHP-Code:
    $GLOBALS['TL_CTE']['texts']['productlist'
    &
    PHP-Code:
    $GLOBALS['TL_DCA']['tl_content']['palettes']['productlist'
    verwenden.

  23. #63
    Contao-Nutzer
    Registriert seit
    02.12.2017.
    Beiträge
    138

    Standard

    Damit habe ich allerdings wieder das gerade genannte Problem.
    Zitat Zitat von Spooky Beitrag anzeigen
    PHP-Code:
    $GLOBALS['TL_CTE']['texts']['productlist'

    Und damit läd er mir auch meine Palettes nicht mehr.

    Zitat Zitat von Spooky Beitrag anzeigen
    PHP-Code:
    $GLOBALS['TL_DCA']['tl_content']['palettes']['productlist'
    verwenden.
    Wie kommst du denn darauf, dass ich das ändern sollte?
    Geändert von waldo (15.05.2019 um 10:59 Uhr)

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

    Standard

    Wenn dein Template ce_productlist lautet, dann muss auch der Typ des Inhaltselements productlist lauten. Wenn der Typ des Inhaltselements productlist lautet, muss auch die Palette productlist lauten.

  25. #65
    Contao-Nutzer
    Registriert seit
    02.12.2017.
    Beiträge
    138

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Wenn der Typ des Inhaltselements productlist lautet, muss auch die Palette productlist lauten.
    Dem stimme ich die grundsätzlich erstmal zu. Aber ich referenziere das Template doch über
    PHP-Code:
    protected $strTemplate 'ce_productlist'
    ?

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

    Standard

    Diese Klassenvariable hat aber nichts mit der Liste an verfügbaren Templates zu tun. Dafür zieht Contao den Typ des Inhaltselementes heran. Der Lautet bei dir momentan noch ProductList statt productlist. Du könntest dein Template aber auch umgekehrt einfach zu ce_ProductList umbenennen, wäre aber nicht die Norm.

    Die Contao 4 Norm wären übrigens camel cases . Also ce_productList und productList. Ist aber auch mehr oder weniger Geschmackssache.

  27. #67
    Contao-Nutzer
    Registriert seit
    02.12.2017.
    Beiträge
    138

    Standard

    Ich muss mich korrigieren!
    Musste in der ContentElement-Klasse das ganze im class_alias noch korrigieren dann funktioniert es so, wie du gesagt hast.

    Vielen Dank!

    Habe es auch direkt mal auf die Camel Cases geändert. Wenn ich gerade schon dabei bin mich in die Thematik einzuarbeiten, dann kann ich es ja auch richtig machen

    Kannst du mir vielleicht einen Tipp geben wie von hier aus die nächsten Schritte wären?
    Konkret habe ich noch einen fertigen DCA über die ich verschiedene Produkte mit Bildern und Zusatzinformationen anlegen kann. Der ist soweit auch schon fertig.
    Über das jetzt erstellte ContentElement möchte ich gerne quasi meinen gesamten Inhalt aus dem DCA ausgeben.

    Wie müsste ich prinzipiell hier denn vorgehen? Arbeite ich hier dann mit der genFeOutput() in der ContentElement-Klasse?

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
  •