Ergebnis 1 bis 11 von 11

Thema: ContentTeaser.php updatesicher überschreiben

  1. #1
    Contao-Fan Avatar von Arno
    Registriert seit
    11.12.2009.
    Ort
    Potsdam-Babelsberg
    Beiträge
    290

    Standard ContentTeaser.php updatesicher überschreiben

    Ich habe gerade eine kleine Erweiterung für mich gebaut, die es mir ermöglicht im Backend ein Bild inklusive Alternativtext für einen Teaser einzubauen. Funktioniert auch alles wunderbar.
    Um die Ausgabe im Frontend zu steuern, musste ich allerdings die Datei 'ContentTeaser.php' im Verzeichnis 'system/modules/frontend/' ändern.
    Nun bin ich mir nicht sicher, bzw. ich bin sogar ziemlich sicher, dass das nicht updatesicher ist. Kann ich irgendwie eine alternative 'ContentTeaser.php' in meine Erweiterung integrieren, die dann die Standardversion im Frontend-Modul überschreibt?

    Lieben Dank.

  2. #2
    Contao-Fan Avatar von christian.barkowsky
    Registriert seit
    22.06.2009.
    Ort
    Brandenburg an der Havel
    Beiträge
    388
    Partner-ID
    6285
    User beschenken
    Wunschliste

    Standard

    hallo,

    genau sowas habe ich auch schon gebaut. leider ist es nicht update sicher.
    am besten wäre an der stelle ein neuer hook für die teaser.

  3. #3
    Contao-Fan Avatar von Arno
    Registriert seit
    11.12.2009.
    Ort
    Potsdam-Babelsberg
    Beiträge
    290

    Standard

    Danke für die schnelle Antwort.

    Ok, ich bin ziemlich am Anfang mit Typolight und habe jetzt die Sache mit den Hooks in der Anleitung gelesen. Die generelle Funktionalität hat sich mir erschlossen, aber zum laufen habe ich das nicht bekommen.
    Ich habe mir die Liste der zur Verfügung stehenden Hooks angesehen und gedacht, dass ich entweder mit 'outputFrontendTemplate' oder 'parseFrontendTemplate' was werden sollte. Ich habe die Vorgaben entsprechend angepasst.

    'config.php' im Verzeichnis 'config' meiner Erweiterung:
    PHP-Code:
    <?php $GLOBALS['TL_HOOKS']['parseFrontendTemplate'][] = array('ContentTeaser''parseFrontendTemplate');
    ?>
    'ContentTeaser.php' im root meiner Erweiterung:
    PHP-Code:
    <?php

    public function parseFrontendTemplate($strContent$strTemplate)
    {
        if (
    $strTemplate == 'ContentTeaser')
        {
            class 
    ContentTeaser extends ContentElement
    {

        
    /**
         * Template
         * @var string
         */
        
    protected $strTemplate 'ce_teaser';


        
    /**
         * Generate content element
         */
        
    protected function compile()
        {
            
    $objArticle $this->Database->prepare("SELECT p.id AS id, p.alias AS alias, a.id AS aid, a.title AS title, a.alias AS aalias, a.teaser AS teaser, a.teaser_image AS teaser_image, a.teaser_image_alt AS teaser_image_alt, a.inColumn AS inColumn FROM tl_article a, tl_page p WHERE a.id=? AND a.pid=p.id")
                                         ->
    limit(1)
                                         ->
    execute($this->article);

            if (
    $objArticle->numRows 1)
            {
                return;
            }

            
    $link '/articles/';

            if (
    $objArticle->inColumn != 'main')
            {
                
    $link .= $objArticle->inColumn ':';
            }

            
    $link .= (strlen($objArticle->aalias) && !$GLOBALS['TL_CONFIG']['disableAlias']) ? $objArticle->aalias $objArticle->aid;
            
    $this->Template->href $this->generateFrontendUrl($objArticle->row(), $link);

            
    $this->Template->headline $objArticle->title;
            
    $this->Template->text $objArticle->teaser;
            
    $this->Template->image $objArticle->teaser_image;
            
    $this->Template->image_alt $objArticle->teaser_image_alt;
            
    $this->Template->more $GLOBALS['TL_LANG']['MSC']['more'];
        }
    }

        }

        return 
    $strContent;
    }

    ?>
    Das Resultat ist ein weißer Bildschirm. Irgendwelche Ideen?

  4. #4
    AG CMS-Garden
    Contao-Urgestein
    Avatar von lindesbs
    Registriert seit
    05.06.2009.
    Ort
    Oer-Erkenschwick
    Beiträge
    4.154
    Partner-ID
    keine
    User beschenken
    Wunschliste

    Standard

    System->Einstellungen->Fehlermeldungen einschalten !


    Ich weiss auch nicht, ob man innerhalb der Classenfunktion eine neue Klasse erzeugen kann. Leg die sicherer ausserhalb deiner Funktion.

    PHP-Code:
    array('ContentTeaser''parseFrontendTemplate'); 
    Es wird er Hook parseFrontendTemplate in der Klasse ContentTeaser aufgerufen. Das geht so nicht.

    Mach ein eigenes Modul, wo du statt ContentTeaser ein ContentTeaserEnheanced z.b. erstellt mit deiner Klassendefinition.
    von Willi Voltz aus PR 500: Henry George sagte einmal: »Kultur ist Zusammenarbeit.«


    Contao-Hosting: begeisterter Uberspace-Nutzer

  5. #5
    Contao-Fan Avatar von Arno
    Registriert seit
    11.12.2009.
    Ort
    Potsdam-Babelsberg
    Beiträge
    290

    Standard

    Ich habs jetzt so hinbekommen:
    In die 'config.php' in meinem Modulverzeichnis habe ich einfach folgenden Code geschrieben:

    PHP-Code:
    <?php
        $GLOBALS
    ['TL_CTE']['includes']['teaser'] = 'ContentTeaser';
        
        class 
    ContentTeaser extends ContentElement
        
    {
        
            
    /**
             * Template
             * @var string
             */
            
    protected $strTemplate 'ce_teaser';
        
        
            
    /**
             * Generate content element
             */
            
    protected function compile()
            {
                
    $objArticle $this->Database->prepare("SELECT p.id AS id, p.alias AS alias, a.id AS aid, a.title AS title, a.alias AS aalias, a.teaser AS teaser, a.teaser_image AS teaser_image, a.teaser_image_alt AS teaser_image_alt, a.inColumn AS inColumn FROM tl_article a, tl_page p WHERE a.id=? AND a.pid=p.id")
                                             ->
    limit(1)
                                             ->
    execute($this->article);
        
                if (
    $objArticle->numRows 1)
                {
                    return;
                }
        
                
    $link '/articles/';
        
                if (
    $objArticle->inColumn != 'main')
                {
                    
    $link .= $objArticle->inColumn ':';
                }
        
                
    $link .= (strlen($objArticle->aalias) && !$GLOBALS['TL_CONFIG']['disableAlias']) ? $objArticle->aalias $objArticle->aid;
                
    $this->Template->href $this->generateFrontendUrl($objArticle->row(), $link);
        
                
    $this->Template->headline $objArticle->title;
                
    $this->Template->text $objArticle->teaser;
                
    $this->Template->image $objArticle->teaser_image;
                
    $this->Template->image_alt $objArticle->teaser_image_alt;
                
    $this->Template->more $GLOBALS['TL_LANG']['MSC']['more'];
            }
        }

    ?>
    Damit wird der Aufruf aus der 'config.php' des Frontend-Moduls überschrieben und die Ausgabe funktioniert wie gewünscht. Und updatesicher sollte es auch sein, da die config.php ja in meinem Modulverzeichnis liegt.
    Oder habe ich mich da zu früh gefreut und mir jetzt die Katze im Sack eingehandelt?

  6. #6
    Gesperrt
    Registriert seit
    08.04.2010.
    Ort
    Bonn
    Beiträge
    3

    Standard

    Stehe gerade vor dem gleichen Problem wie du und muss leider feststellen, dass deine Lösung bei mir nicht funktioniert... sehr schade.

    Hat jemand vielleicht eine Idee?
    Die config.php wo die Klasse drin ist wird auf jeden Fall ausgeführt, dort passieren auch noch andere Dinge.

    Bin sonst nur auf das gestoßen:
    http://https://contao.org/issues/175
    Das ist ja genau das was ich brauche, wurde leider fest für den psishop eingebaut... warum?

    edit:
    Der "getContentElements"-Hook scheint ohne Funktion zu sein :-(
    Geändert von Christoph (08.04.2010 um 14:18 Uhr)

  7. #7
    Contao-Fan Avatar von deerwood
    Registriert seit
    24.11.2009.
    Ort
    Hamburg
    Beiträge
    344

    Standard

    Hallo Cristoph, Arno, alle,

    Zitat Zitat von Christoph Beitrag anzeigen
    Stehe gerade vor dem gleichen Problem wie du und muss leider feststellen, dass deine Lösung bei mir nicht funktioniert... sehr schade.
    Warum funktioniert das denn nicht (Fehlermeldungen anmachen)? Ich weise auch darauf hin, dass der Code von Arno nicht alles sein kann, denn er greift ja in seinem SELECT auf die Felder tl_article.teaser_image und tl_article.teaser_image_alt zu, die es von Hause aus nicht in tl_article gibt. Arno hat uns also mindestens sein config/database.sql nicht gezeigt, aber vermutlich auch noch den Code für die Backend-Erweiterung vorenthalten, um diese Felder durch Redakteure befüllen zu können.

    Zitat Zitat von Christoph Beitrag anzeigen
    Bin sonst nur auf das gestoßen:
    http://https://contao.org/issues/175
    Das ist ja genau das was ich brauche, wurde leider fest für den psishop eingebaut... warum?

    edit:
    Der "getContentElements"-Hook scheint ohne Funktion zu sein :-(
    Warum der HOOK psishop spezifisch ist und nicht allgemeingültig ("getContentElements" hätte er gehiessen, aber es gibt ihn nicht) kann ich Dir auch nicht sagen, Leo hat im Ticket ja nur gesagt "nach reiflicher Überlegung".

    Nun scheint der psishop (bzw. hier) ja nach mehr als 1 Jahr immer noch alpha zu sein. Falls Du ihn also nicht einsetzt, könntest Du Dir für Deinen Eigengebrauch ein Dummy-psishop-Modul bauen, das nur die statische Methode Psishop::getProductlisting(ModuleArticle $x) implementiert. In dieser Methode bringst Du den Code aus dem Ticket unter, der den HOOK "getContentElements" aufruft. Dein eigenes Modul kann sich dann in den HOOK reinhängen.

    Du darfst aber dies Dummy-Modul (das ja in system/modules/psishop/* sein muss) NICHT ins ER stellen, jedenfalls nicht unter dem Namen "psishop", das wäre fies und unfair dem psishop Autor gegenüber und würde sogleich wieder rausfliegen.

    LG, Georg

  8. #8
    Contao-Fan Avatar von christian.barkowsky
    Registriert seit
    22.06.2009.
    Ort
    Brandenburg an der Havel
    Beiträge
    388
    Partner-ID
    6285
    User beschenken
    Wunschliste

    Standard

    http://https://contao.org/issues/889 ... tja ... leider hab ich das aus den augen verloren ... hänge mich mal wieder rein ;-)

  9. #9
    Gesperrt
    Registriert seit
    08.04.2010.
    Ort
    Bonn
    Beiträge
    3

    Standard

    @deerwood:
    Mit funktioniert nicht meinte ich es wird nicht ausgeführt, keinerlei Fehlermeldungen sonst, es wird einfach nur die original Teaser Klasse genommen.
    Dass die Sachen die Arno da erweitert hat bei mir nicht greifen ist mir schon klar ;-)

    Einen Psishop Dummy zu bauen hatte ich auch schon überlegt, aber so richtig schön ist das auch nicht... wahrscheinlich mache ich es aber so. Danke!

    @christian.barkowsky:
    Du könntest dort auch einfach leos eigenen Code vorschlagen ;-)


    -- Update:
    Wenn man teaser only an hat dann kommt der garnicht bis zu der Psishop-hook-Stelle :-(
    Das gilt aber auch nur wenn man nicht das Inhaltselement Teaser ändern will sondern den Teaser wenn mehrere Artikel auf einer Seite sind, ich bin also eigentlich falsch in dem thema ;-)
    Ich müsste die ModuleArticle.php überschreiben :-(
    Geändert von Christoph (09.04.2010 um 11:07 Uhr)

  10. #10
    Contao-Fan
    Registriert seit
    19.06.2009.
    Beiträge
    385

    Standard

    Warum nutzt ihr nicht die eingebaute Variante, die es seit TL 2.8 gibt? Man muss lediglich im Teaser-Template die Bildausgabe einbauen (standardmäßig nicht im Teaser enthalten, also bei den vollständigen Artikeln/News/...)

  11. #11
    Contao-Fan Avatar von deerwood
    Registriert seit
    24.11.2009.
    Ort
    Hamburg
    Beiträge
    344

    Standard

    Hi Christoph,

    Einen Psishop Dummy zu bauen hatte ich auch schon überlegt, aber so richtig schön ist das auch nicht... wahrscheinlich mache ich es aber so.
    Machs nicht. Der Hook ist in 2.8.2 rausgeflogen, siehe Ticket 1770.

    LG, Georg

Aktive Benutzer

Aktive Benutzer

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

Ähnliche Themen

  1. Wie Contao Funktion (updatesicher) überschreiben?
    Von juju im Forum Entwickler-Fragen
    Antworten: 6
    Letzter Beitrag: 08.10.2010, 13:24
  2. Modul Updatesicher mit dcaconfig??
    Von kischd im Forum Installation / Update
    Antworten: 6
    Letzter Beitrag: 16.06.2010, 12:16
  3. Login Modul Template Updatesicher hinzufügen / überschreiben
    Von christian.kolb im Forum Entwickler-Fragen
    Antworten: 6
    Letzter Beitrag: 16.04.2010, 10:58
  4. Mediabox-CSS updatesicher ändern?
    Von Anke im Forum Bilder/Dateien
    Antworten: 2
    Letzter Beitrag: 24.03.2010, 21:31

Lesezeichen

Lesezeichen

Berechtigungen

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