Ergebnis 1 bis 9 von 9

Thema: 4.4.x mehrsprachiger Mailtext in Cronjob

  1. #1
    Contao-Nutzer
    Registriert seit
    17.01.2020.
    Beiträge
    111

    Standard 4.4.x mehrsprachiger Mailtext in Cronjob

    Hallo Contao Community!

    Ich habe auf meiner mehrsprachigen Webseite einen Cronjob erstellt, der eine Erinnerungsmail an die Benutzer herausschicken soll, die x Tage nicht mehr angemeldet waren. Soweit funktioniert alles, jedoch wird die Sprache der aktuell versendeten E-Mails noch per "Zufall" ausgewählt und dann halt an die Benutzer versendet. Es kann also passieren, dass deutsche Nutzer einen anderssprachigen Text in der E-Mail erhalten, ist natürlich nicht Sinn und Zweck.

    Soweit ich das nachvollziehen konnte, wird der Cronjob erst versendet, sobald zu einer gewissen Zeit eine Interaktion auf der Webseite ausgeführt wurde oder? Das würde nämlich auch erklären, warum der Nachrichtentext mal so und mal so übersetzt abgeschickt wird, denn zu Zeitpunkt x könnte ein Nutzer die Webseite in einer bestimmten Sprache (z.B. deutsch, englisch, französisch etc.) aufrufen. Der Cronjob würde dann im jeweiligen hinterlegten Wörterbuch die Übersetzungen holen und absendet.

    Hat jemand eine Idee, wie man das Problem lösen könnte?

    Der Code ist nichts weltbewegendes, lediglich die Cronklasse mit einer DB-Abfrage und dem E-Mail-Objekt mit dem einzufügenden Text:

    PHP-Code:
    $objEmail->text =  $GLOBALS['TL_LANG']['custom']['reminder']['mail']; 

  2. #2
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.925
    User beschenken
    Wunschliste

    Standard

    bau Dir ein Symfony Command und dort setze das NC ein - da kannst Du die Sprache vorgeben ... müsstest bei den Mitgliedern noch eine Sprache hinzufügen

    Aufruf dan per richtigem Cronjob

  3. #3
    Contao-Nutzer
    Registriert seit
    17.01.2020.
    Beiträge
    111

    Standard

    Danke für deine Antwort. Mir ist noch eine mögliche Alternative eingefallen. Ich speichere bei der Registrierung die Sprache der Seite mit dem Registrierungsformular mit und lese die dann innerhalb des CronJobs aus. Zeitgleich habe ich in meiner Übersetzungsdatei an die verschiedensprachigen Texten die Sprache mit angehangen (z.B. $Global...['de']) und gebe dann den Text, je nach gespeicherte Sprachvariable aus. Mal sehen, ob es funktioniert. Ansonsten werde ich wohl zu deiner Variante übergehen.

  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

    Unter Contao 4.9 und höher zB so:
    PHP-Code:
    // src/Cron/ExampleCron.php
    namespace App\Cron;

    use 
    Contao\CoreBundle\ServiceAnnotation\CronJob;
    use 
    Contao\CoreBundle\Translation\Translator;
    use 
    Contao\MemberModel;

    /**
     * @CronJob("hourly")
     */
    class ExampleCron
    {
        private 
    $translator;

        public function 
    __construct(Translator $translator)
        {
            
    $this->translator $translator;
        }

        public function 
    __invoke(): void
        
    {
            
    // Get the member
            
    $member MemberModel::findBy();

            
    // Store current translator locale
            
    $prevLocale $this->translator->getLocale();

            
    // Set the locale to the member's language
            
    $this->translator->setLocale($member->language);

            
    // Access translations and send email
            // …

            // Restore previous translator locale
            
    $this->translator->setLocale($prevLocale);
        }

    Und du solltest einen dedizierten Cronjob auf deinem Server einrichten: https://docs.contao.org/manual/de/sy...-einstellungen (siehe auch https://docs.contao.org/dev/framewor.../#command-line)
    » sponsor me via GitHub or PayPal or Revolut

  5. #5
    Contao-Nutzer
    Registriert seit
    17.01.2020.
    Beiträge
    111

    Standard

    Danke für den Hinweis und das Beispiel Spooky. Aktuell hänge ich leider noch mit dem Ausgangsproblem in der Luft, ehe ich zu deiner Lösung übergehen würde. Thereotisch funktioniert mein Cronjob so wie er sollte, jedoch wird der Text aus meiner Übersetzungsdatei nicht ausgelesen.

    Der Code für die E-Mail Benachrichtigung innerhalb des Crons ist wie folgt:

    PHP-Code:
    $objEmail = new Email();
                    
    $objEmail->from '...';
    $objEmail->fromName '...';
    $objEmail->subject '...';
    $objEmail->text =  $GLOBALS['TL_LANG']['custom']['reminder']['mail'][$item['language']]; // ergibt nichts, wird leer ausgeliefert
    $objEmail->sendTo($item['email']); 
    Die E-Mail kommt beim Empfänger an, jedoch wird kein Text in der E-Mail ausgegeben. Wenn ich nur

    PHP-Code:
    $objEmail->text $item['language']; 
    schreibe, dann erfolgt die E-Mail mit dem Text "de". In meiner Übersetzungsdatei sieht es folgendermaßen aus:

    PHP-Code:
    $GLOBALS['TL_LANG']['custom']['reminder']['mail']['de'] = "Test"
    Ich verstehe nicht ganz, warum das nicht funktioniert, zu mal ich schon an verschiedenen Stellen mit dynamischen Übersetzungseinträgen gearbeitet habe. Hast du dafür eine Erklärung Spooky, oder jemand anderes?

  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

    Wo genau steht die Übersetzung drin?
    » sponsor me via GitHub or PayPal or Revolut

  7. #7
    Contao-Nutzer
    Registriert seit
    17.01.2020.
    Beiträge
    111

    Standard

    app/resources/contao/languages/de/default.php

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

    Standard

    Dann fehlt dir noch ein
    PHP-Code:
    System::loadLanguageFile('default'
    ggf. musst du davor noch die richtige Sprache mit
    PHP-Code:
    $GLOBALS['TL_LANGUAGE'] = … 
    setzen. Am besten wäre es jedoch, wenn du auf Contao 4.9 oder höher aktualisierst und den Translator wie beschrieben benutzt, dann musst du dich nicht selbst darum kümmern.
    Geändert von Spooky (11.06.2021 um 17:29 Uhr)
    » sponsor me via GitHub or PayPal or Revolut

  9. #9
    Contao-Nutzer
    Registriert seit
    17.01.2020.
    Beiträge
    111

    Standard

    Funktioniert perfekt! Musste tatsächlich noch die Sprache vorher festlegen, da sonst wieder kein übersetzter Text erschien, außer ich war auf dem richtigen Sprachbaum aktiv.

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
  •