Bei eigenen E-Mails oxcontent Seiten immer in Deutsch


#1

Ich habe ein eigenes Modul gemacht, um spezifische E-Mails an Kunden zu verschicken. Es ist möglich die E-Mails direkt aus dem BackEnd zu verschicken und auch per CronJob.

Wenn ich die E-Mails vom BackEnd aus verschicke, dann gehen die E-Mails in richtiger Sprache (DE, EN, FR) raus. Wenn ich die E-Mails über den CronJob verschicke, dann sind die Inhalte, die über CMS gepflegt werden und mit

[{ oxcontent ident=“cms_content” }]
geladen werden, immer auf Deutsch.

Was läuft hier falsch? :confused:


#2

Offensichtlich der cronjob oder die Funktion, die er aufruft.


#3

Der CronJob ruft z.B. einfach

$oEmail = oxNew( "oxemail" );
							
$oEmail->sendOrderEmailToUser( $oOrder );

Und schon wird nur Deutsch von CMS Seiten (z.B. Standard Email Footer) geladen. Über BackEnd funktioniert richtig.


#4

sendOrderEmailTouser wird normalerweise von User selbst im Frontend ausgelöst, und zu dem Zeitpunkt ist die für den User passende Sprache aktiv, diese wird wohl auch übernommen.
Wenn du die anderen Mails anschaust, die aus dem Backend verschickt werden, z.b. sendSendenNowMail() http://docu.oxid-esales.com/CE/sourcecodedocumentation/4.9.4/classox_email.html#a87627e6e567d689fadfd387ba7090e02
da wird die Sprache aus der Bestellung übernommen. Ich denke, genau so müsstest du auch in deinem Script vorgehen


#5

Das habe ich mir auch schon gedacht.

Hier ist ein Beispiel CronJob:

<?php

class mb_mail extends oxUBase
{
    public function cronjob1()
    {        
        $myConfig = $this->getConfig();
		$sSQL = "SELECT oxid FROM oxorder WHERE 1 LIMIT 10";
            
		$rs = oxDb::getDb()->Execute($sSQL);
		if($rs != false && $rs->RecordCount() > 0) {
			while(!$rs->EOF) {
				$aOrders[] = $rs->fields[0];
				$rs->MoveNext();
			}
		}
        
		if(count($aOrders) > 0)
		{
			foreach($aOrders as $value)
			{
				$oOrder = oxNew("oxorder" );
				if ( $oOrder->load( $value ) )
				{                        
					// send eMail
					$oEmail = oxNew( "oxemail" );
					
					$oEmail->sendSendedNowMail( $oOrder );
					
					echo $oOrder->oxorder__oxordernr->value.'<br>';
					
				}
			}
		}
        return;
    }
}

Die Bestellungen, die in Englisch und Französisch gemacht wurden, haben alle CMS Inhalte in Deutsch. :eek:


#6

Das liegt vermutlich daran, dass das Smarty-Plugin gecachte oxcontent-Objekte lädt.


#7

das könnte man testen, schalte mal live Modus aus und probiers nochmal.
Sonst würde ich versuchen $iOrderLang zu debuggen


#8

Schon passiert.

Versuch 1:

in function.oxcontent.php die Zeile auskommentiert:

$smarty->oxidcache = new oxField($sText, oxField::T_RAW);

Versuch 2:

Produktivmodus deaktiviert.

Beide Versuche habe keinen positiven Effekt.


#9

Nein, diese Arten von Cache meinte ich nicht. Es gibt einen internen Runtime-Cache für “nackte” Klasseninstanzen (also Objekte), welche durch die Factory oxNew erstellt werden: http://docu.oxid-esales.com/CE/sourcecodedocumentation/4.9.4/classox_utils_object.html


#10

Gibt es hier inzwischen schon eine Lösung? Stehe vor demselben Problem…

Versende per Cron Mails und setze die Sprache folgend:

oxRegistry::getLang()->setBaseLanguage((int)$iLanguage);
oxRegistry::getLang()->setTplLanguage((int)$iLanguage);

Nur die oxmultilang werden in den Smarty-Templates ersetzt, oxcontent, oxifcontent bleiben in der Sprache der ersten Mail…

Wäre super, wenn es hier eine Lösung gibt.