Ergebnis 1 bis 7 von 7

Thema: Durch getTemplateGroup zur Auswahl gestelltes Template wird im FE nicht ausgegeben

  1. #1
    Contao-Nutzer
    Registriert seit
    03.08.2017.
    Beiträge
    7

    Frage Durch getTemplateGroup zur Auswahl gestelltes Template wird im FE nicht ausgegeben

    Hallo,
    meine Extension in der 4.4 läuft soweit, ich möchte jedoch 2 verschiedene Templates im Backend-Modul zur Auswahl stellen und finde dazu nur recht alte Beiträge.
    Mein Problem ist, dass ich das Template optimal in meinem Modul wählen kann, in meinen Artikel einbinde, aber dieses im Frontend einfach nicht ausgegeben wird.
    Folgende bin ich bis jetzt vorgegangen:

    Zuerst habe ich in meiner tl_module.php dieses Feld + die Methode getTemplateGroup angelegt:
    Code:
    $GLOBALS['TL_DCA']['tl_module']['fields']['meals_template'] = array
    (
    	'label'                   => &$GLOBALS['TL_LANG']['tl_module']['meals_template'],
    	'default'                 => 'meals_listed',
    	'exclude'                 => true,
    	'inputType'               => 'select',
    	'options_callback'        => array('tl_module_meals', 'getMealsTemplates'),
    	'eval'                    => array('tl_class'=>'w50'),
    	'sql'                     => "varchar(64) NOT NULL default ''"
    );
    
    class tl_module_meals extends Backend
    {
    	public function getMealsTemplates()
    	{
    		return $this->getTemplateGroup('meals_');
    	}
    }
    Anschließend habe ich 2 Templates mit dem Prefix 'meals_' erstellt, diese werden ja wie gesagt auch im Modul zur Auswahl angezeigt.

    Nun kommt der Part an dem ich im moment sehr unsicher bin was genau gemacht werden muss, die Einbindung in der compile function des modules - folgendes habe ich aus den Core-Modulen entnommen:
    Code:
    /** @var FrontendTemplate|object $objTemplate */
    $objTemplate = new \FrontendTemplate($this->meals_template);
    Es scheint irgendwie an der Kommunikation zwischen den Templates mit dem Prefix 'meals_' und meinem allgemeinen Template 'mod_meallist' zu liegen.
    Hat jemand Ahnung was genau fehlt damit das Ausgewählte Template im Frontend ausgegeben wird?

  2. #2
    Contao-Fan Avatar von eS_IT
    Registriert seit
    21.07.2010.
    Ort
    Werne a. d. Lippe
    Beiträge
    585
    Partner-ID
    6161
    User beschenken
    Wunschliste

    Standard

    Hallo flo_1stof8,

    Du musst in Deiner complie-Methode entweder $objTemplate->parse(); einer Eigenschaft Deines Templates mod_meallist zuweisen und dort dann ausgeben, oder Du weißt das Template direkt der Klasseneigenschaft Template zu, in dem Du $this->Template = new \FrontendTemplate($this->meals_template); machst. Du kannst dann Dein Template direkt ohne mod_meallist ausgeben.

    Viele Grüße,
    eS_IT
    Viele Grüße,
    eS_IT
    --
    e@sy Solutions IT - Ihr Partner für professionelle Softwareentwicklung
    Website - Contao Codebook - Partnerprofil - GitHub

  3. #3
    Contao-Nutzer
    Registriert seit
    03.08.2017.
    Beiträge
    7

    Standard

    Erstmal vielen Dank.
    $this->Template = new \FrontendTemplate($this->meals_template); hat funktioniert, meine 'meals_' Templates werden angesprochen, allerdings werden hier ja meine allgemeinen Template Variablen so nicht mitgegeben, richtig? zumindest kann ich diese in meinem Fall nicht in den Templates ansprechen.

    Zu $objTemplate->parse();, was meinst du denn mit 'Eigenschaft Deines Templates mod_meallist' ?

  4. #4
    Contao-Fan Avatar von eS_IT
    Registriert seit
    21.07.2010.
    Ort
    Werne a. d. Lippe
    Beiträge
    585
    Partner-ID
    6161
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von flo_1stof8 Beitrag anzeigen
    Erstmal vielen Dank.
    $this->Template = new \FrontendTemplate($this->meals_template); hat funktioniert, meine 'meals_' Templates werden angesprochen, allerdings werden hier ja meine allgemeinen Template Variablen so nicht mitgegeben, richtig? zumindest kann ich diese in meinem Fall nicht in den Templates ansprechen.

    Zu $objTemplate->parse();, was meinst du denn mit 'Eigenschaft Deines Templates mod_meallist' ?
    Mit $objTemplate->parse(); erhälst Du die Ausgabe Deines Templates. Diese muss dann ja noch im Template des Moduls (z.B. mod_meallist) ausgegeben werden, damit der Inhalt sichtbar wird. Du könntest also folgendes machen:

    PHP-Code:
    $objTemplate = new \FrontendTemplate($this->meals_template);
    $this->Template->content $objTemplate->parse(); 
    Dann kannst Du im Template des Moduls mit echo $this->content; den Inhalt Deines Templates ausgeben.

    So wie Du es jetzt machst wird einfach das Template des Moduls überschrieben. Beides funktioniert. Ist halt Geschmackssache wie man es macht.

    Viele Grüße,
    eS_IT
    Viele Grüße,
    eS_IT
    --
    e@sy Solutions IT - Ihr Partner für professionelle Softwareentwicklung
    Website - Contao Codebook - Partnerprofil - GitHub

  5. #5
    Contao-Nutzer
    Registriert seit
    03.08.2017.
    Beiträge
    7

    Standard

    Ok, ich schreibe also mein Template im meals_..., dies wird auf mein mod_meallist übergeben und dort quasi vor der Ausgabe 'Verstanden', da ich ja Variablen verwendet habe die nur im mod_meallist eingefügt sind, oder stehe ich total auf dem Schlauch?

    Es ist wie vorher, eine allgemeine Ausgabe erfolgt aber die Variablen werden nicht ausgegeben.
    Dazu muss ich sagen das mod_meallist die Variablen sehr wohl übergeben bekommt, mit print_r($this) werden mir diese ausgegeben.
    Geändert von flo_1stof8 (22.08.2017 um 15:52 Uhr)

  6. #6
    Contao-Fan Avatar von eS_IT
    Registriert seit
    21.07.2010.
    Ort
    Werne a. d. Lippe
    Beiträge
    585
    Partner-ID
    6161
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von flo_1stof8 Beitrag anzeigen
    und dort quasi vor der Ausgabe 'Verstanden', da ich ja Variablen verwendet habe die nur im mod_meallist eingefügt
    Du erstellst die Variable ja selbst mit $this->Template->content = '...';. Deshalb kannst Du in Deinem Modultemplate darauf zugreifen.

    $this->Template ist in der Regel Dein Modultemplate (mod_meallist). Mit $this->Template->content = '...'; erstellst Du eine Variable, auf die Du in Deinem Template (mod_meallist) mit $this->content zugreifen kannst. Du kannst der Variable natürlich auch den Inhalt einen anderen Templates geben (wie oben beschrieben) und diesen dann dort ausgeben. Auf alle Felder Deines Modul kannst Du übrigens auch direkt zugreifen, da diese automatisch an das Modultemplate übergeben werden. Bei anderen Templates klappt dies nicht. Dort kannst Du aber mit $objTemplate->addData($this->arrData); das selbe erreichen.

    Zitat Zitat von flo_1stof8 Beitrag anzeigen
    print_r($this) werden mir diese ausgegeben
    Dann solltest Du sie auch in mod_meallist direkt mit echo $this->VARIABLENNAME; ausgeben können.

    Viele Grüße,
    eS_IT
    Viele Grüße,
    eS_IT
    --
    e@sy Solutions IT - Ihr Partner für professionelle Softwareentwicklung
    Website - Contao Codebook - Partnerprofil - GitHub

  7. #7
    Contao-Nutzer
    Registriert seit
    03.08.2017.
    Beiträge
    7

    Daumen hoch

    Alles klar, ich habs verstanden, vielen Dank dafür

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
  •