Ergebnis 1 bis 8 von 8

Thema: fe_page extenden für eigenes Modul?

  1. #1
    Contao-Fan Avatar von Hauge
    Registriert seit
    31.01.2010.
    Beiträge
    643

    Standard fe_page extenden für eigenes Modul?

    Hallo zusammen, ich habe mir einen pre-Loader zusammengebaut.
    Problem: ich muss hierzu auf die fe_page einwirken und möchte aber (eigentlich) das picture-sizing verwenden.
    Der aktuelle Stand sieht wie folgt aus:
    Ich lade mir über den parseTemplate-Hook ein geändertes fe_page-Template und über den generatePage-Hook mein einstellbares Modul rein.
    config.php:
    Code:
    $GLOBALS['TL_HOOKS']['generatePage'][] = array('ModBBPreLoader', 'myGeneratePage');
    $GLOBALS['TL_HOOKS']['parseTemplate'][] = array('TemplateOverride', 'parseTemplate');
    TemplateOverride.php:
    Code:
    if ($objTemplate->getName() == 'fe_page') {$objTemplate->setName('fe_page_preload');
    ModBBPreLoader.php:
    PHP-Code:
    <?php if (!defined('TL_ROOT')) die('You can not access this file directly!');class ModBBPreLoader extends Frontend{public function myGeneratePage(\PageModel $objPage, \LayoutModel $objLayout, \PageRegular $objPageRegular){$preloadit Database::getInstance()->query('SELECT    addPreload,preloader_color_bgr,preloader_color_1,preloader_color_2,img_preload,preloader_size FROM tl_page WHERE id = '.$GLOBALS['objPage']->rootId.'');$preload $preloadit->fetchAllAssoc();$color_bgr='#'.$preload[0]['preloader_color_bgr'];$color_1='#'.$preload[0]['preloader_color_1'];$color_2='#'.$preload[0]['preloader_color_2'];if (empty($preload[0]['preloader_size'][0]) AND empty($preload[0]['preloader_size'][1])){$img_Size_id $preload[0]['preloader_size'][2];}$objpreFile FilesModel::findByUuid($preload[0]['img_preload']);$getSize = \Picture::create($objpreFile->path$preload[0]['preloader_size'])->getTemplateData();$GLOBALS['TL_PAGE']['PreLoad'] = $objpreFile->path;$GLOBALS['TL_JAVASCRIPT'][] = 'system/modules/bb_LoadEffect/assets/script/BBLoader.js';$GLOBALS['TL_HEAD'][] = '<style>#bbLoader{    position:fixed;    left:0;    top:0;    right:0;    bottom:0;    background:'.$color_bgr.';    z-index:100}.bbloader-second,.bbloader-wrap,.bbloader-wrap img{position:absolute;left:0;top:0;bottom:0;right:0;margin:auto}.bbloader-second,.bbloader-wrap{height:200px;width:200px}.bbloader-wrap img{height:'.$getSize['img']['height'].'px;width:'.$pre_width $getSize['img']['width'].'px}.bbloader-second{    border:7px double;    border-radius:50%;    border-color:'.$color_1.' '.$color_2.';    animation:bbloader-spin 570ms infinite linear;    -o-animation:bbloader-spin 570ms infinite linear;    -ms-animation:bbloader-spin 570ms infinite linear;    -webkit-animation:bbloader-spin 570ms infinite linear;    -moz-animation:bbloader-spin 570ms infinite linear}@keyframes bbloader-spin{100%{transform:rotate(360deg)}}@-o-keyframes bbloader-spin{100%{-o-transform:rotate(360deg);transform:rotate(360deg)}}@-ms-keyframes bbloader-spin{100%{-ms-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes bbloader-spin{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-moz-keyframes bbloader-spin{100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}</style>';  }}
    fe_page_preload:
    Code:
    ....
    <?= $this->mootools ?>
    <?php if ($GLOBALS['TL_PAGE']['PreLoad']): ?>
    <div id="bbLoader">
    <div class="bbloader-wrap">
    <img src="<?php echo $GLOBALS['TL_PAGE']['PreLoad']; ?>">
    <?php echo $GLOBALS['TL_PAGE']['bb_height']; ?>
    <div class="bbloader-second"></div>
    </div>
    </div>
    <?php endif; ?>
    </body>
    </html>
    Das Ziel:
    Ich möchte ein Template erstellen, welches ich in die fe_page im vor dem schließenden body-Tag inserten kann.
    Ich stehe da ein bisschen auf dem Schlauch, da es mir über die globals und den Weg über die fe_page direkt etwas seltsam erscheint.
    Hat jemand evtl. einen Denkanstoß?

    mfg
    Hauge

  2. #2
    Contao-Urgestein Avatar von fiedsch
    Registriert seit
    09.07.2009.
    Ort
    München
    Beiträge
    2.972

    Standard

    Wahrscehinlich verstehe ich Dein Problem nicht, aber könntest Du nicht eine eigene fe_page verwenden, in die Du vor der schließenden div einfach ein {{insert_module::*}} einbaust?

    Zitat Zitat von Hauge Beitrag anzeigen
    den Weg über die fe_page direkt etwas seltsam erscheint.
    Wieso? Dafür gibt es ja die Möglichkeit Templates zu überschreiben oder eigene Templates auszuwählen.
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

  3. #3
    Contao-Fan Avatar von Hauge
    Registriert seit
    31.01.2010.
    Beiträge
    643

    Standard

    Hallo Fiedsch,

    Es handelt sich dabei zum Einen um ein in sich geschlossenes Modul, welches über die Seitenstruktur und nicht über das Layout aktivierbar ist, somit sollte dies ohne "manuellen" Eingriff in die fe_page passieren, ansonsten müssen immer die passenden Seitenlayouts zugewiesen werden. Dies ist für uns zwar kein Problem - jedoch sehr oft für den Redakteur (manche dürfen hier die Berechtigungen dazu auch gar nicht erhalten).

    Zum Anderen arbeiten wir sehr zurückhaltend mit verschiedenen Layouts, da dies unterm Strich immer ne Menge Arbeit bedeutet, vor allem im Multidomainbetrieb und bei umfangreichen Seiten.

    Daher wäre ein Lösung direkt über das Modul natürlich toll.

    mfg
    Hauge

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

    Standard

    In deinem Modul solltest du dieses zusätzliche HTML besser über
    PHP-Code:
    $GLOBALS['TL_BODY'][] = 
    einfügen. Oder notfalls über den outputFrontendTemplate Hook, wo du den HTML Code einschleust. Bei letzterer Lösung kannst du sicherstellen, dass dein HTML Code in jeder Contao Installation erscheint - auch mit komplett unterschiedlichen fe_page Template.
    Geändert von Spooky (03.03.2018 um 13:14 Uhr)

  5. #5
    Contao-Fan Avatar von Hauge
    Registriert seit
    31.01.2010.
    Beiträge
    643

    Standard

    wo du den HTML Code einschleust.
    Wie krieg ich den da den Code rein?
    im Template war das ja mit $this->extend...
    Diese Methode ist aber hier nicht definiert.

    Code:
    public function ChangeFeTemplate($buffer, $templateName){
    echo 'test';
    exit;
    }
    Am liebsten wäre es mir, ein template zu inserten und die position festzulegen (Html-Code geht natürlich auch)

    auch mit komplett unterschiedlichen fe_page
    -> brauch ich dann nur das weg lassen:
    Code:
    if ('fe_page' === $templateName) {        // Modify output     }
    
    ? -> ich weiß: Fragen über Fragen, aber da tapp ich jetzt im Dunkeln...

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

    Standard

    Ich kenne deinen Code nicht. Aber dein eigenes Template parst du zuerst so:
    PHP-Code:
    $objTemplate = new \FrontendTemplate('your_template');
    $strHtml $objTemplate->parse(); 

  7. #7
    Contao-Fan Avatar von Hauge
    Registriert seit
    31.01.2010.
    Beiträge
    643

    Standard

    That's it! Danke!
    Code:
    public function ChangeFeTemplate($buffer, $templateName)
    {
       $objTemplate = new \FrontendTemplate('mod_bb_preloader');
       $strHtml = $objTemplate->parse();
       return str_replace('</body>', $strHtml.'</body>', $buffer); 
    }

  8. #8
    Contao-Fan Avatar von Hauge
    Registriert seit
    31.01.2010.
    Beiträge
    643

    Standard

    Hier mal noch der derzeitige Stand:
    autoload.php
    PHP-Code:
    ClassLoader::addClasses(array(    'ModBBPreLoader'         => 'system/modules/bb_LoadEffect/modules/ModBBPreLoader.php',));TemplateLoader::addFiles(array(    'mod_bb_preloader'      => 'system/modules/bb_LoadEffect/templates',)); 
    config.php

    PHP-Code:
     if (TL_MODE == 'FE'){$GLOBALS['TL_HOOKS']['generatePage'][] = array('ModBBPreLoader''GeneratePreloader');$GLOBALS['TL_HOOKS']['outputFrontendTemplate'][] = array('ModBBPreLoader''ChangeFeTemplate');} 
    ModBBPreLoader.php
    PHP-Code:
     class ModBBPreLoader extends Frontend{public function ChangeFeTemplate($buffer$templateName)    {        $preloadit Database::getInstance()        ->query('SELECT    addPreload,img_preload,preloader_size FROM tl_page WHERE id = '.$GLOBALS['objPage']->rootId.'');        $preload $preloadit->fetchAllAssoc();            $objpreFile FilesModel::findByUuid($preload[0]['img_preload']);        $GLOBALS['TL_BODY']['PreLoadImg'] = $objpreFile->path;        $objTemplate = new \FrontendTemplate('mod_bb_preloader');        $strHtml $objTemplate->parse();        return str_replace('</body>'$strHtml.'</body>'$buffer);        }public function GeneratePreloader(\PageModel $objPage)    {                $preloadit Database::getInstance()        ->query('SELECT    addPreload,preloader_color_bgr,preloader_color_1,preloader_color_2,img_preload,preloader_size FROM tl_page WHERE id = '.$GLOBALS['objPage']->rootId.'');        $preload $preloadit->fetchAllAssoc();        $color_bgr='#'.$preload[0]['preloader_color_bgr'];        $color_1='#'.$preload[0]['preloader_color_1'];        $color_2='#'.$preload[0]['preloader_color_2'];        if (empty($preload[0]['preloader_size'][0]) AND empty($preload[0]['preloader_size'][1])){$img_Size_id $preload[0]['preloader_size'][2];}        if ($preload[0]['addPreload']=='1')        {                    $GLOBALS['TL_JAVASCRIPT'][] = 'system/modules/bb_LoadEffect/assets/script/BBLoader.js|static';            $GLOBALS['TL_HEAD'][] = '<style>#bbLoader{position:fixed;left:0;top:0;right:0;bottom:0;background:'.$color_bgr.';z-index:100}.bbloader-second,.bbloader-wrap,.bbloader-wrap img{position:absolute;left:0;top:0;bottom:0;right:0;margin:auto}.bbloader-second,.bbloader-wrap{height:200px;width:200px}.bbloader-wrap img{height:'.$getSize['img']['height'].'px;width:'.$pre_width $getSize['img']['width'].'px}.bbloader-second{border:7px double;border-radius:50%;border-color:'.$color_1.' '.$color_2.';animation:bbloader-spin 570ms infinite linear;-o-animation:bbloader-spin 570ms infinite linear;-ms-animation:bbloader-spin 570ms infinite linear;    -webkit-animation:bbloader-spin 570ms infinite linear;    -moz-animation:bbloader-spin 570ms infinite linear}@keyframes bbloader-spin{100%{transform:rotate(360deg)}}@-o-keyframes bbloader-spin{100%{-o-transform:rotate(360deg);transform:rotate(360deg)}}@-ms-keyframes bbloader-spin{100%{-ms-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes bbloader-spin{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-moz-keyframes bbloader-spin{100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}</style>';          }    }    } 
    mod_bb_preloader.html5
    PHP-Code:
    <?php if ($GLOBALS['TL_BODY']['PreLoadImg']): ?><div id="bbLoader"><div class="bbloader-wrap"><img src="<?php echo $GLOBALS['TL_BODY']['PreLoadImg']; ?>"><div class="bbloader-second"></div></div></div><?php endif; ?>
    So funktioniert es jetzt, Danke Spooky.

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •