Ergebnis 1 bis 16 von 16

Thema: Wie funktionieren eigene Inserttags in Contao 4?

  1. #1
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.509

    Standard Wie funktionieren eigene Inserttags in Contao 4?

    Ich habe in mein (funktionierendes) Bundle jetzt einen Inserttag eingefügt. Dazu habe ich neu erstellt (brauchte ich bisher nicht):

    vendor\schachbulle\contao-helper-bundle\Resources\contao\config\config.php:
    PHP-Code:
    echo "Test";
    $GLOBALS['TL_HOOKS']['replaceInsertTags'][] = array('Schachbulle\ContaoHelperBundle\Classes\Tags''Alter'); 
    "Test" wird nicht ausgegeben, was mir sagt, das die Datei config.php nicht berücksichtigt wird.

    vendor\schachbulle\contao-helper-bundle\Classes\Tags.php:
    PHP-Code:
    namespace Schachbulle\ContaoHelperBundle\Classes

    class 
    Tags extends \Frontend
    {

        public function 
    Alter($strTag)
        {
            echo 
    "Test";
            
    $arrSplit explode('::'$strTag);

            if(
    $arrSplit[0] != 'alter' && $arrSplit[0] != 'cache_alter') return false // Nicht unser Inserttag

            // Parameter angegeben?
            
    if (isset($arrSplit[1]))
            {
                return 
    'Parameter '.$arrSplit[1];
            }
            else
            {
                return 
    'Fehler! foo ohne Parameter!';
            }

        }


    Symfony meldet einen Fehler, wenn ich das Tag {{alter:19.09.1932}} in einem Text-Element einbinde:
    Code:
    ERROR
    09:35:46
    	contao 	Unknown insert tag {{alter::19.09.1932}}
    Hide context
    
    [?
      "contao" => ContaoContext^ {#1091 ?}
    ]
    Liegt es an der fehlenden autoload.php???
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

  2. #2
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Vienna, Austria
    Beiträge
    24.072
    Partner-ID
    10107
    User beschenken
    Wunschliste

    Standard

    Wie man am besten Hooks registriert und strukturiert ist in der Dokumentation beschrieben: https://docs.contao.org/dev/framewor...istering-hooks

    Was meinst du mit fehlender autoload.php? Mit der machst du ja selbst nichts direkt. Du definierst das autoloading in deiner composer.json - und das scheint ja korrekt zu sein (sonst würde dein Bundle ja gar nicht funktionieren).

  3. #3
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.509

    Standard

    Ich habe extra nochmal diese Doku https://docs.contao.org/books/cookbo...nserttags.html nachgelesen. Eine autoload.php gibt es in Contao 4 nicht mehr. Aber warum wird die config.php nicht gefunden? Damit hatte ich bisher nie Probleme, seitdem ich fast jede Woche an x Bundles programmiere. Okay, da waren auch noch keine Inserttags dabei...

    P.S. Ursprünglich hatte ich die config.php hier: vendor\schachbulle\contao-helper-bundle\Resources\contao\config.php - und vor meinem Posting an die richtige Stelle geschoben. Wird aber trotzdem nicht geparst. Wenn ich ungültiges PHP dort reinschreibe, gibt es keinen Crash.
    Ich lösche jetzt mal alles an Cache was möglich ist. Dabei bin ich sowieso immer im Debugmodus.
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

  4. #4
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.509

    Standard

    Der Composer-Cache war schuld. Ich sollte also beim Entwickeln nicht nur regelmäßig mehrmals täglich den Prod- und Dev-Cache löschen, sondern auch den Composer-Cache.
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

  5. #5
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Vienna, Austria
    Beiträge
    24.072
    Partner-ID
    10107
    User beschenken
    Wunschliste

    Standard

    Der Composer Cache hat darauf keine Auswirkung. Aber evt. hattest du das Autoloading von Composer optimieren lassen? Während der Entwicklung solltest du nicht die -o bzw. --optimize-autoload Funktion benutzen (und auch nicht den Contao Manager, da dieser -o bzw. --optimize-autoload automatisch benutzt).

  6. #6
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.509

    Standard

    Ich benutze fast immer den CM zum Löschen des Caches. Das nervt zwar, ist aber immer noch besser, als sich erst auf der Konsole einzuloggen und mehrere Befehle einzutippen oder ein Shellskript auszuführen. Wobei ... ich könnte ein Shellskript per Cronjob alle 5 Minuten die Caches in der Entwicklungsumgebung löschen lassen.
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

  7. #7
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Vienna, Austria
    Beiträge
    24.072
    Partner-ID
    10107
    User beschenken
    Wunschliste

    Standard

    Du entwickelst also nicht lokal?

  8. #8
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.509

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Du entwickelst also nicht lokal?
    Da ich an vier verschiedenen Rechnern/Orten entwickle und die lokale Verwaltung über Clouds wegen der Symlinks in Contao 4 nicht möglich ist (Dropbox und Co. zerstören Symlinks), entwickle ich auf dem entfernten Webserver. Bis Contao 3 war die lokale Entwicklung in XAMPP noch möglich.
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

  9. #9
    Contao-Fan
    Registriert seit
    29.06.2016.
    Beiträge
    259

    Standard

    Ich hab nun auch versucht gemäß dieser Anleitung:
    https://docs.contao.org/dev/framewor...istering-hooks
    ... einen eigenen Inserttag zu erstellen.

    D.h. ich hab folgendes gemacht:


    Schritt #1

    Ich hab eine config.php mit folgendem Inhalt angelegt:
    PHP-Code:
    <?php
    // contao/config.php
    $GLOBALS['TL_HOOKS']['replaceInsertTags'][] = [\App\EventListener\MyCustomInserttagListener::class, 'myReplaceInsertTags'];


    Schritt #2

    Und die Klasse dazu angelegt:
    PHP-Code:
    <?php 
    // src/EventListener/MyCustomInserttagListener.php


    namespace App\EventListener;

    class 
    MyCustomInserttagListener
    {

        public function 
    myReplaceInsertTags($strTag)
        {
            
    // Parameter abtrennen
            
    $arrSplit explode('::'$strTag);

            if (
    $arrSplit[0] != 'foo' && $arrSplit[0] != 'cache_foo')
            {
                
    //nicht unser Insert-Tag
                
    return false;
            }

            
    // Parameter angegeben?
            
    if (isset($arrSplit[1]) && $arrSplit[1] == 'bar')
            {
                return 
    'Parameter bar';
            }
            else
            {
                return 
    'Fehler! foo ohne Parameter!';
            }
        }
    }

    Es will aber nicht funktionieren.
    Ich hab's mit einem "{{foo::bar}}" im einem Text-Inhaltselement getestet:
    Der Inserttag verschwindet im Frontend und wird nicht ersetzt.

    Könnt ihr mir da vielleicht helfen?
    Danke!

  10. #10
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Vienna, Austria
    Beiträge
    24.072
    Partner-ID
    10107
    User beschenken
    Wunschliste

    Standard

    Welche Contao Version?

  11. #11
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.509

    Standard

    Ich würde das so schreiben:
    PHP-Code:
     <?php
    // contao/config.php
    $GLOBALS['TL_HOOKS']['replaceInsertTags'][] = ['App\EventListener\MyCustomInserttagListener''myReplaceInsertTags'];
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

  12. #12
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Vienna, Austria
    Beiträge
    24.072
    Partner-ID
    10107
    User beschenken
    Wunschliste

    Standard

    Code:
    \App\EventListener\MyCustomInserttagListener::class
    ist die bessere Variante

  13. #13
    Contao-Nutzer
    Registriert seit
    24.08.2018.
    Ort
    Magdeburg
    Beiträge
    72

    Standard

    Zitat Zitat von Samson1964 Beitrag anzeigen
    Da ich an vier verschiedenen Rechnern/Orten entwickle und die lokale Verwaltung über Clouds wegen der Symlinks in Contao 4 nicht möglich ist (Dropbox und Co. zerstören Symlinks), entwickle ich auf dem entfernten Webserver. Bis Contao 3 war die lokale Entwicklung in XAMPP noch möglich.
    Die Entwicklung ist auch in Contao 4.4 mit einem lokalen XAMPP möglich - muss nur entsprechend konfiguriert werden. Ich empfehle aber dringend, dass du dich mit verteilten Arbeiten, Versionierungssystemen und auch Auto-Deployment befasst. Dass du eine Dropbox für die Verwaltung nutzt ist ziemlich fragwürdig. Git oder Mercurial wäre hier wesentlich hilfreicher. Wenn du dann noch Docker nutzt, ist das Problem mit der lokalen Entwicklung kein Problem mehr

  14. #14
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.509

    Standard

    Zitat Zitat von WorkerBeeEu Beitrag anzeigen
    Die Entwicklung ist auch in Contao 4.4 mit einem lokalen XAMPP möglich - muss nur entsprechend konfiguriert werden.
    Ich weiß. Habe XAMPP auf allen meinen vier Rechnern (an unterschiedlichen Orten) installiert. Datenbanken und Webs sind in der Dropbox. Funktioniert von überall wunderbar. Bis auf das Symlink-Problem, womit die ganzen Clouds nicht klar kommen, da Symlinks einen absoluten statt eines relativen Pfades speichern. Deshalb geht es mit Contao 4 nicht.

    Zitat Zitat von WorkerBeeEu Beitrag anzeigen
    Ich empfehle aber dringend, dass du dich mit verteilten Arbeiten, Versionierungssystemen und auch Auto-Deployment befasst.
    Ich nutze Sourcetree zusammen mit Git und GitHub. Wobei "nutzen" jetzt übertrieben ist: Ich lege nur einfache Versionen an und synchronisiere die mit dem Repository auf GitHub.

    Zitat Zitat von WorkerBeeEu Beitrag anzeigen
    Dass du eine Dropbox für die Verwaltung nutzt ist ziemlich fragwürdig.
    Falls Du den Datenschutz meinst: Ich könnte auch Nextcloud benutzen. Das ändert aber am Symlink-Problem nichts.

    Zitat Zitat von WorkerBeeEu Beitrag anzeigen
    Git oder Mercurial wäre hier wesentlich hilfreicher.
    Git auf der Kommandozeile übernimmt für mich Sourcetree. Mercurial kenne ich nicht.

    Zitat Zitat von WorkerBeeEu Beitrag anzeigen
    Wenn du dann noch Docker nutzt, ist das Problem mit der lokalen Entwicklung kein Problem mehr
    Docker kenne ich nur dem Namen nach. Auch nach Lesen des Wikipedia-Artikels weiß ich nicht, ob Docker mir helfen kann unter Windows (in der Cloud) auf mehreren Rechnern zu arbeiten und überall auf dieselben Daten zugreifen zu können.

    Und lokale Entwicklung unter XAMPP generell: Viel zu langsam, weil der Webserver des Hosters deutlich schneller ist. Aber wir gehen hier gerade am Thema Inserttags vorbei.
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

  15. #15
    Contao-Fan
    Registriert seit
    29.06.2016.
    Beiträge
    259

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Welche Contao Version?
    Ich verwende die 4.9.3

  16. #16
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Vienna, Austria
    Beiträge
    24.072
    Partner-ID
    10107
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von thesweetg Beitrag anzeigen
    Ich verwende die 4.9.3
    Dann solltest du es lieber so machen wie in der Dokumentation beschrieben, via Annotation: https://docs.contao.org/dev/framewor...ng-annotations

    Bzw. du kannst diesen Code hier 1:1 kopieren (wobei du nicht unbedingt alle Funktionsparameter brauchst): https://docs.contao.org/dev/referenc...tTags/#example

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
  •