Ergebnis 1 bis 8 von 8

Thema: Einbinden einer zusätzlichen function in Contao 4.9

  1. #1
    Contao-Nutzer Avatar von Eva
    Registriert seit
    03.07.2013.
    Beiträge
    127

    Standard Einbinden einer zusätzlichen function in Contao 4.9

    Liebe Community

    Ich möchte bei einer Installation eine Funktion zur Umwandlung gewisser Zeichen hinterlegen, so dass ich diese mehrmals verwenden kann.

    Die Funktion ist einfach gehalten:
    PHP-Code:
    function umlauteumwandeln($str){
            
    $tempstr = Array("Ä" => "AE""Ö" => "OE""Ü" => "UE""ä" => "ae""ö" => "oe""ü" => "ue"" " => "-"); 
            return 
    strtr($str$tempstr);
        } 
    Die Funktion selber funktioniert einwandfrei, wenn ich sie direkt im Template hinterlege, wo sie auch gebraucht wird. So kann ich aber dieses Inhaltselement nur 1x einbinden. Deshalb möchte ich die Funktion gerne so ablegen, dass ich sie mehrmals aufrufen kann.

    Ich habe nun die Funktion einzubinden versucht: im Template-Ordner z.B. einen zusätzlichen Ordner (php) angelegt und die Datei dann in der fe-page mit <?php include_once TL_ROOT."/templates/php/helper.php"; ?>, aber erhalte im Frontend eine Fehlermeldung: Attempted to call function "umlauteumwandeln" from the global namespace. Auch die Einbindung mittels {{file::helper.php}} (das file liegt dann direkt im Templateordner) funktioniert nicht.

    Kann mir da evt jemand weiterhelfen, wo ich meine eigenen Helper updatesicher abspeichern kann?
    Herzlichen Dank,
    Eva

  2. #2
    Contao-Urgestein Avatar von do_while
    Registriert seit
    15.06.2009.
    Ort
    Berlin | Deutschland
    Beiträge
    3.407
    Partner-ID
    1081
    User beschenken
    Wunschliste

    Standard

    Teste einfach ab, ob die Funktion bereits definiert ist und lege die Funktion nur an, wenn sie nicht existiert:

    PHP-Code:
    <?php
    if (!function_exists('umlauteumwandeln')) {
        function 
    umlauteumwandeln($str){
            
    $tempstr = Array("Ä" => "AE""Ö" => "OE""Ü" => "UE""ä" => "ae""ö" => "oe""ü" => "ue"" " => "-"); 
            return 
    strtr($str$tempstr);
        }  
    }

  3. #3
    Alter Contao-Hase
    Registriert seit
    20.09.2012.
    Ort
    Lüneburger Heide
    Beiträge
    1.488
    User beschenken
    Wunschliste

    Standard

    Hi,

    an welcher Stelle bindest Du die Datei mit {{file::}} ein?
    Kann es sein, dass Deine helper.php an der Stelle, wo Deine Inhaltselemente im FE gezeigt werden sollen, nicht verfügbar ist?

    Gruß
    tschero

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

    Standard

    PHP-Code:
    // src/Helper/UmlautHelper.php
    namespace App\Helper;

    class 
    UmlautHelper
    {
        private static 
    $umlautMapping = ['Ä' => 'AE''Ö' => 'OE''Ü' => 'UE''ä' => 'ae''ö' => 'oe''ü' => 'ue'' ' => '-'];

        public function 
    __invoke(string $buffer): string
        
    {
            return 
    strtr($bufferself::$umlautMapping);
        }

    PHP-Code:
    // src/EventListener/ParseTemplateListener.php
    namespace App\EventListener;

    use 
    App\Helper\UmlautHelper;
    use 
    Contao\CoreBundle\ServiceAnnotation\Hook;
    use 
    Contao\Template;
    use 
    Terminal42\ServiceAnnotationBundle\ServiceAnnotationInterface;

    /**
     * @Hook("parseTemplate")
     */
    class ParseTemplateListener implements ServiceAnnotationInterface
    {
        private 
    $umlautHelper

        
    public function __construct(UmlautHelper $umlautHelper)
        {
            
    $this->umlautHelper $umlautHelper;
        }

        public function 
    __invoke(Template $template): void
        
    {
            
    $umlautHelper $this->umlautHelper;

            
    $template->convertUmlauts = function (string $buffer) use ($umlautHelper): string {
                return 
    $umlautHelper($buffer);
            };
        }

    HTML-Code:
    <!-- templates/ce_text.html5 -->
    <?= $this->convertUmlauts($this->headline) ?>
    Geändert von Spooky (29.05.2020 um 09:50 Uhr)

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

    Standard

    Übrigens: das was du da machen willst, kannst du auch mit dem Slug Generator von Martin Auswöger machen, den auch Contao benutzt

  6. #6
    Contao-Nutzer Avatar von Eva
    Registriert seit
    03.07.2013.
    Beiträge
    127

    Standard

    Vielen herzlichen Dank für alle Antworten!
    Und ein herzliches Dankeschön an Spooky für das Beispiel. Das hilft mir sehr. Auch für zukünftige eigene Funktionen.
    Ich werde mir den Slug Generator gerne noch anschauen

    Liebe Grüsse
    Eva

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

    Standard

    Hier das Beispiel mit dem Slug Generator in Contao 4.9:
    PHP-Code:
    // src/EventListener/ParseTemplateListener.php
    namespace App\EventListener;

    use 
    Contao\CoreBundle\ServiceAnnotation\Hook;
    use 
    Contao\CoreBundle\Slug\Slug;
    use 
    Contao\Template;
    use 
    Symfony\Component\HttpFoundation\RequestStack;
    use 
    Terminal42\ServiceAnnotationBundle\ServiceAnnotationInterface;

    /**
     * @Hook("parseTemplate")
     */
    class ParseTemplateListener implements ServiceAnnotationInterface
    {
        private 
    $slug
        
    private $requestStack;

        public function 
    __construct(Slug $slugRequestStack $requestStack)
        {
            
    $this->slug$slug;
            
    $this->requestStack $requestStack;
        }

        public function 
    __invoke(Template $template): void
        
    {
            
    /** @var \Contao\PageModel $page */
            
    $page $this->requestStack->getCurrentRequest()->attributes->get('pageModel');

            
    $template->slug = function (string $text) use ($page): string {
                return 
    $this->slug->generate($text$page->getSlugOptions());
            };
        }

    PHP-Code:
    <!-- templates/ce_text.html5 -->
    <?= $this->slug($this->headline?>
    Das generiert den Slug anhand der Einstellung im Website Root.

  8. #8
    Contao-Nutzer Avatar von Eva
    Registriert seit
    03.07.2013.
    Beiträge
    127

    Standard

    Danke Dir für das Beispiel mit dem Slug Generator

    Liebe Grüsse Eva

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
  •