Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: MODUL: Inhalt beliebigen Contents aus Content Manager in Shop-Mails

    John_Delay

    • Mitglied
    • Beiträge: 124
    • Geschlecht:
    Hallo an alle,

    erstmal ein herzliches Dankeschön an das modified eCommerce Shopsoftware Team für Ihre tolle Arbeit. Nachdem ich mich die erste Zeit eher zurückgehalten und hier viel gelesen habe, möchte ich nun auch einen Beitrag zur Community leisten. Ich hoffe nur, dass es ein deratiges Mod noch nicht gibt - zumindest konnte ich es hier nirgends finden.
    Mit folgendem Feature können nun alle im Content Manager des Backends eingegebenen Inhalte an die Admin Emails angehängt werden. Es ersetzt u. a. die Platzhalter [SIGNATUR]  &  [WIDERRUF].
    Der neue Platzhalter sieht wie folgt aus: [cm_gID=x] , wobei x die group_id des Inhaltes darstellt.
    Beispielsweise können die ursprünglichen Platzhalter [SIGNATUR]  &  [WIDERRUF] in der Basis Installation von modified eCommerce Shopsoftware ersetzt werden durch:

    Code: PHP  [Auswählen]
    [cm_gID=7]

    und:

    Code: PHP  [Auswählen]
    [cm_gID=9]

    Die jeweilige group_id findet sich in der Tabelle des Content Managers im Backend.
    Die Email-Sprache wird dem originären Auftrag zugeordnet - entspricht also der Sprache, die der Kunde zum Kaufzeitpunkt im Frontend eingestellt hatte.  Wenn ich mich recht entsinne, wurde vorher die Email-Sprache entsprechend der aktuellen Session ausgewählt (, was mir völlig unverständlich war ...).  Dabei sollte nun auch die "long version" des Datums in der entsprechenden Sprache gesendet werden.

    WAS ZU ÄNDERN IST:

    inc/xtc_php_mail.inc.php:
    Vorweg: aus Gründen der Übersichtlichkeit, habe ich die Funktion von den meisten Ergänzungs-Kommentaren befreit, sonst hätte ich selbst die Übersicht verloren. Sie wurde von mir aber auch so dermaßen "umgemodelt", dass nicht viel vom ursprünglichen Code übrig geblieben ist :D . Ok, ich habe mir, ehrlich gesagt, nicht mehr die Mühe gemacht, die Kommentare von Dokuman und web28 wieder einzupflegen ... bin mir auch nicht sicher, ob es überhaupt noch möglich ist. Ich hoffe, das wird hier nicht übel genommen (ich bitte um Rückmeldung). Stattdessen habe ich die beiden im Header erwähnt - einverstanden?
    Wesentliche Änderung:
    • Die Funktion wurde um den Parameter $lang_code ergänzt.
    • Der Inhalt wird aus der Datenbank-Tabelle "content_manager" geholt, statt (wie zuvor) aus dem Datei-System.
    • Diverse Modifikationen, die hier nicht alle aufführbar sind ... einfach mal den Code sichten :) .

    admin/orders.php:
    @Tomcraft - kleinen Bug behoben (der mit diesem Feature aber nichts zu tun hat) ca. in Zeile 126
    Suche (ca. in Zeile 125)
    Code: PHP  [Auswählen]
    if (trim($order->info['language']) == '') $order->info['language'] = $_SESSION['languages'];
    Ersetze mit
    Code: PHP  [Auswählen]
    if (trim($order->info['language']) == '') $order->info['language'] = $_SESSION['language'];  // trailing "s" eleminated by I. Jonas, OWL-Concept.com, 19.07.2012

    Um auch das Datum in der Sprache des Auftrages zu erhalten, wurde unmittelbar vor dem Funktionsaufruf "xtc_date_long" versucht, die "setlocale" erneut auszuführen. Ich bin jedoch nicht sicher, ob das für alle Sprachen funktioniert - es sollte jedoch keine Auswirkungen auf noch folgende Prozesse haben.
    Suche (ca. in Zeile 211)
    Code: PHP  [Auswählen]
    $smarty->assign('ORDER_DATE', xtc_date_long($check_status['date_purchased']));
    Davor einfügen
    Code: PHP  [Auswählen]
    // BOF - added by I. Jonas, OWL-Concept.com - 2012-07-13
    @setlocale(LC_TIME, $lang_code.'_'.strtoupper($lang_code).'@euro', $lang_code.'_'.strtoupper($lang_code), $lang_code.'-'.strtoupper($lang_code), $lang_code, $lang_code.'_'.strtoupper($lang_code).'.ISO_8859-1', $lang_code.'_'.strtoupper($lang_code).'.ISO_8859-2', $lang_code.'_'.strtoupper($lang_code).'.ISO_8859-9', $lang_code.'_'.strtoupper($lang_code).'.ISO_8859-15');
    // EOF - added by I. Jonas, OWL-Concept.com - 2012-07-13

    Die Variable $lang_code wurde dem Funktionsaufruf von "xtc_php_mail" angehängt.
    Suche (ca. in Zeile 231)
    Code: PHP  [Auswählen]
    $txt_mail
    );
    Ersetze mit
    Code: PHP  [Auswählen]
    $txt_mail,
    $lang_code  // added by I. Jonas, OWL-Concept.com - 2012-07-13
    );

    contact_us.html:
    Hier wurde lediglich ein "<br />" (in Zeile 5) entfernt ...  das sieht dann im Frontend schöner aus ;) .

    order_mail.txt  &  order_mail.html :
    Beispielhaft wurden dem Paket die angepassten Dateien in deutsch und englisch beigefügt (jeweils mit [cm_gID=7]  &  [cm_gID=9] statt [SIGNATUR]  &  [WIDERRUF]).

    Inhalte im Content Manager ändern:
    Zu beachten ist, dass die im Content Manager abgelegten Inhalte (falls gewünscht) nun auch in die HTML-Emails wandern und daher "gestyled" werden sollten - andernfalls erhält man (je nach Email-Client) den angehängten Text z.B. in unschönem Times New Roman (naja, Geschmackssache). Bei der Layout-Anpassung sollte auf "rel"-Verweise, die auf Stylesheets auf dem Server verweisen, (und somit auf class- und id-Attribute in den Tags), verzichtet werden. Stattdessen kann das Layout per inline CSS erfolgen.
    Für einfache Einträge (nur Text) habe ich z. B. jedes <p>  ersetzen mit
    Code: PHP  [Auswählen]
    <p style="font-family: verdana, arial, sans-serif; font-size: 13px;">

    Für Tabellen habe ich auf die CSS-Klasse "div.highlightbox" in der  /templates/xtc5/stylesheet.css  zurückgegriffen und die Tabelle in eine entsprechende <div> eingebunden und jeden <td>-Tag modifiziert. Hier am Beispiel der Kontaktdaten (bzw. der späteren Signatur in den Emails):
    Code: PHP  [Auswählen]
    <div style="border: 1px solid; border-color: #CCC; background: #F8F8F8; padding: 15px; overflow: auto">
    <table width="100%" border="0" align="left" cellpadding="0" cellspacing="0">
        <colgroup><col width=" 41%" /><col width=" 59%" /></colgroup>
        <tbody>
            <tr>
                <td style="font-family:arial,sans-serif; font-size:12px">Company:&nbsp;&nbsp;&nbsp;</td>
                <td style="font-family:arial,sans-serif; font-size:12px">OWL-Concept.com</td>
            </tr>
        ...
        </tbody>
    </table>
    </div>
    Die 3 "&nbsp;" zwischen den ersten  <td>-Tags sind nicht ganz unwichtig. Sie entsprechen in den plain text emails dem horizontalen Abstand zwischen "Company:" und dem Firmennamen (in diesem Beispiel).

    Resümé:
    Zugegebenermaßen hat man dadurch eine geringfügige, aber (wie ich finde) in Kauf zu nehmende Einschränkung im Layout der Signatur und des Widerrufes. Die Vorteile überwiegen m. E. doch sehr - insbesondere, dass man den Inhalt nun nur noch an einer Stelle, statt an 3 Stellen zu bearbeiten hat.  Sofern man sich dafür entscheidet, würden 4 Dateien pro Sprache (signatur.html, signatur.txt, widerruf.html & widerruf.txt) völlig überflüssig.

    Gedankenanstoss / Noch nicht getestetes:
    Schön wäre es, man könnte nun alle Emails im Content Manager verwaltet werden. Dazu müsste man lediglich für den Inhalt jeder *.html_Email einen Content-Manager-Eintrag anlegen und den Inhalt der *.html dort hinein kopieren. Anschließend *.html- und *.txt-Dateien leeren und nur den Platzhalter [cm_gID=x] für den zugeordneten Content dort hinein schreiben bzw. nach Bedarf zusätzlich die Kontaktdaten [cm_gID=7] und den Widerruf [cm_gID=9]. Aber dann bitte nicht die Email-Masken im Frontend veröffentlichen ;) Außerdem bin ich mir sicher, dass die übrigen Platzhalter (jene in geschweiften Klammern) bereits vor der Übergabe an die xtc_php_mail.inc.php ersetzt wurden ... Aber vielleicht hat ja jemand Lust, dem nachzugehen und schreibt anschließend noch den Content Managers so um, dass die Mails vom übrigen Content getrennt sind und auch die Veröffentlichung im Frontend ausgeschlossen wird.

    Ich bin jetzt erstmal rd. 2 Wochen nicht / kaum erreichbar, würde mich aber freuen, wenn das Feature in der Zwischenzeit von jemandem getestet würde und der bzw. diejenigen ein Feedback dazu abgeben könnte. Bei mir klappt es jedenfalls wunderbar.

    Solong, Ingo :D

    [EDIT Tomcraft 23.02.2013: Modul für Shopversion 1.06 angehängt.]
    [EDIT Tomcraft 24.02.2013: Modul für Shopversion 1.06 aktualisiert.]
    [EDIT jannemann 26.02.2013: Modul auf Version 1.06_03 aktualisiert.]

    Linkback: https://www.modified-shop.org/forum/index.php?topic=21329.0

    Tomcraft

    • modified Team
    • Gravatar
    • Beiträge: 46.369
    • Geschlecht:
    [...]
    admin/orders.php:
    @Tomcraft - kleinen Bug behoben (der mit diesem Feature aber nichts zu tun hat) ca. in Zeile 126
    Suche (ca. in Zeile 125)
    Code: PHP  [Auswählen]
    if (trim($order->info['language']) == '') $order->info['language'] = $_SESSION['languages'];
    Ersetze mit
    Code: PHP  [Auswählen]
    if (trim($order->info['language']) == '') $order->info['language'] = $_SESSION['language'];  // trailing "s" eleminated by I. Jonas, OWL-Concept.com, 19.07.2012
    [...]

    Danke dir! :thx:

    Korrigiert in r3309

    Grüße

    Torsten

    xtcm_newbie

    • Fördermitglied
    • Beiträge: 30
    • Geschlecht:
    Hallo @John_Delay
     :thx:
    Super Idee - ich wede testen
    Gruss Andreas

    John_Delay

    • Mitglied
    • Beiträge: 124
    • Geschlecht:
    Hallo an Alle,

    na hier ist ja die Hölle los. Bitte nicht alle durcheinander schreiben!  :lol2:  Ich habe mal die Dateien für die 1.06´er Version entsprechend angepasst und hier angehängt.

    @TomCraft: ich denke, Du schiebst die nach oben, oder? Danke schon mal :D ...

    Diese Ausgabe enthält darüber hinaus das Feature, den Email-"From"-Namen und den Email-Betreff multilingual ausgeben zu lassen. Hierzu muss man im Backend lediglich die "From"-Namen bzw. den jeweiligen Email-Betreff z. B. wie folgt eingeben:

    en:My Subject |de:Mein Betreff

    also: Sprachkürzel - Doppelpunkt - Betreff in der entspr. Sprache - Trennzeichen('AltGr'+'<>') - Sprachkürzel ... u.s.w.

    In der inc/xtc_php_mail.inc.php vor:
    Code: PHP  [Auswählen]
            $mail->From = $from_email_address;

    dieses einfügen:
    Code: PHP  [Auswählen]
            // BOC - Mod. by I.J., OWL-Concept, 22.02.2013  *** make from_email_name & email_subject multilingual ***
            $from_name_array = explode('|', $from_email_name);
            for ($i=0; $i<count($from_name_array); $i++) {
                    if (substr($from_name_array[$i], 0, 3) == $lang_code.':') {
                            $from_email_name = substr($from_name_array[$i], 3);
                            break;
                    }
            }
            $subject_array = explode('|', $email_subject);
            for ($i=0; $i<count($subject_array); $i++) {
                    if (substr($subject_array[$i], 0, 3) == $lang_code.':') {
                            $email_subject = substr($subject_array[$i], 3);
                            break;
                    }
            }
            // EOC - Mod. by I.J., OWL-Concept, 22.02.2103  *** make from_email_name & email_subject multilingual ***

    Das funktioniert dann sowohl für Support- als auch für Bestell-Emails. Will man das auch noch für die Emails, die über das Kontaktformular an den Shop-Admin versandt werden, aktivieren, so muss man noch die includes/contact_us.php bearbeiten. Es ist jedoch die Frage, ob das Sinn macht oder ob man es braucht, denn Die Kontaktformular-Emails werden ja derzeit auch nur an den Admin gesendet. Habe die Datei trotzdem mal dazu gepackt.

    etwa in Zeile 65, nach:
    Code: PHP  [Auswählen]
            $notify =  '';
          }

    folgendes eintragen:
    Code: PHP  [Auswählen]
              // BOC - Mod. by I.J., OWL-Concept, 22.02.2013  *** make email_subject multilingual ***
                    $new_contact_us_name = CONTACT_US_NAME;
                    $name_array = explode('|', $new_contact_us_name);
                    for ($i=0; $i<count($name_array); $i++) {
                            if (substr($name_array[$i], 0, 3) == ((isset($_SESSION['language_code'])) ? $_SESSION['language_code'] : 'en').':') {
                                    $new_contact_us_name = substr($name_array[$i], 3);
                                    break;
                            }
                    }

    die Zeile 67:
    Code: PHP  [Auswählen]
          $email_layout = sprintf(EMAIL_SENT_BY, CONTACT_US_NAME, CONTACT_US_EMAIL_ADDRESS, $datum , $uhrzeit) . "\n" .

    ändern in
    Code: PHP  [Auswählen]
          $email_layout = sprintf(EMAIL_SENT_BY, $new_contact_us_name, CONTACT_US_EMAIL_ADDRESS, $datum , $uhrzeit) . "\n" .

    und den Bereich um Zeile 77:
    Code: PHP  [Auswählen]
          xtc_php_mail($email,
                 $name,
                 CONTACT_US_EMAIL_ADDRESS,
                 CONTACT_US_NAME,
                 CONTACT_US_FORWARDING_STRING,

    ändern in
    Code: PHP  [Auswählen]
          xtc_php_mail($email,
                 $name,
                 CONTACT_US_EMAIL_ADDRESS,
                 $new_contact_us_name,
                 CONTACT_US_FORWARDING_STRING,

    That´s it. Der Rest bleibt im Prinzip, wie im ersten Post beschrieben (jedoch mit minalen Änderungen). Am Besten mal den gesamten Code sichten!

    Ach und noch was: falls man mehrerere Sprachen und z. B. sehr langen Betreffzeilen verwenden will, sollte man das Datenbank-Feld 'configuration_value' der Tabelle 'configuration' von varchar(255) auf einen höheren Wert setzen! Es muss ja schließlich der Betreff jeder Sprache in diesem einen Feld stehen.

    Gruß und viel Spass beim Einbauen,

    Ingo

    [EDIT Tomcraft 23.02.2013: Modul in Beitrag 1 angehängt.]

    John_Delay

    • Mitglied
    • Beiträge: 124
    • Geschlecht:
    Hups,

    @TomCraft: habe oben versehentlich eine falsche Datei hochgeladen - bitte Löschen - sry, mein Fehler. Anbei die richtige Datei.

    Gruß, Ingo

    [EDIT Tomcraft 24.02.2013: Modul in Beitrag 1 angehängt.]

    John_Delay

    • Mitglied
    • Beiträge: 124
    • Geschlecht:
    Au backe, sorry Leute  :oops:. Da war noch ein Fehler drin ... nun müsste es aber klappen.

    Gruß, Ingo

    [EDIT jannemann 26.02.2013: Modul in Beitrag 1 aktualisiert.]

    jannemann

    • modified Team
    • Beiträge: 6.275
    • Geschlecht:
    Hallo Ingo,

    vielen Dank fürs Teilen und überarbeiten deines Moduls!
    Ich habe es in Beitrag 1 angehängt.

    Schöne Grüße,
    Jan
    38 Antworten
    24952 Aufrufe
    11. Januar 2011, 15:25:47 von Tomcraft
    5 Antworten
    4112 Aufrufe
    02. Februar 2010, 12:49:23 von Tomcraft
    2 Antworten
    3253 Aufrufe
    23. November 2012, 16:44:13 von Charly
    1 Antworten
    2533 Aufrufe
    30. Mai 2012, 14:30:24 von Jappi