Ergebnis 1 bis 9 von 9

Thema: Tokenvariable mti Zeilenumbrüchen

  1. #1
    Contao-Nutzer
    Registriert seit
    03.12.2014.
    Beiträge
    90

    Standard Tokenvariable mti Zeilenumbrüchen

    Moin Forum,
    ich bitte schon mal um Entschuldigung wenn ich nicht immer die korrekten Bezeichnungen treffe aber ich versuche es so gut wie möglich zu erklären.

    Ich erstelle in einem (Frontend-)Template ein Array. Dieses Array wird mit einer Bestellinformation gefüllt: "2 Eimer Wandfarbe Superweiss, 5l". Wenn mehrere Artikel auf die Wunschliste gepackt werden, dann erweitert sich das Array entsprechend.

    PHP-Code:

    Array
    (
        [
    0] => 2 Eimer Wandfarbe Superweiss5l
        
    [1] => 1 Pinsel Easystreichlange Borsten

    Weiter unten im Template habe ich dann ein Formular eingebunden:

    PHP-Code:
    <section class="inquiry">
       {{
    insert_form::18}}
    </
    section
    In dem Formular gibt es ein verstecktes Feld
    HTML-Code:
    product_inquiry
    In dieses Feld bringe ich nun mit Hilfe von jQuery die Inhalte des Array:
    HTML-Code:
    jQuery('.btn.checkout.inquiryCheck').click(function() {
            let product_inquiry = '<?php echo json_encode($strProductInquiry); ?>';
            jQuery('input[type=\'hidden\'][name=\'product_inquiry\']').replaceWith('<input type="hidden" name="product_inquiry" value=' + product_inquiry + '>');
        });
    Mit dem Array kommt das Valuefeld aber überhautp nicht klar. Ich hatte dann zuerst über

    HTML-Code:
    let product_inquiry = <?php echo json_encode($strProductInquiry); ?>;
    den Textstring übergeben. Was dann auch funktioniert und das Formular wird korrekt versendet. Aber das unschöne dabei ist, dass eben alle Produkte hintereinandergereiht sind. Ich möchte die Ausgabe in der E-Mail gerne mit Zeilenumbruch haben.

    Aber egal was ich für "Tricks" versuche, habe es auch schon statt eines Arrays oben mit verketteten Textstrings versucht, der Zeilenumbruch geht jedesmal verloren, bzw. kommt nicht in dem Token für das NC an und in dem Mail sind die Zeilen dann wieder alle hintereinander...

    Es wäre wirklich (mal wieder) toll, wenn mir jemand ein paar Tipps gibt, wie ich so einen Zeilenumbruch hinbekommen könnte? </GanzLiebGuck> ;-) Danke euch!

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

    Standard

    Du kannst in input Fields keine Zeilenumbrüche haben. Das geht nur in textareas.

    Was genau ist eigentlich dein Ziel?
    » sponsor me via GitHub or Revolut

  3. #3
    Contao-Nutzer
    Registriert seit
    03.12.2014.
    Beiträge
    90

    Standard

    Ja, genau, das habe ich bemerkt ;-).

    Ich habe eine Auflistung von Artikeln. Eine Wunschliste. Diese Liste liegt z.B. als Array vor.
    Diese Wunschliste soll der Kunde per Formular -> NC -> an mich schicken. Er öffnet dazu ein Formular und füllt noch ein paar Angaben aus. Wenn er "senden" drückt, soll das Array über das Formular mitgesendet werden. In der E-Mail sollen dann später alle Postionen aus dem Array untereinander stehen.

    Ich hatte auch schon versucht dem "Hidden" Formualr Feld ein anderes Template zu geben, wo kein Input drin ist, sondern ein "normales" div. Hat aber nicht funktioniert.

    Während ich das schreibe, denke ich, dass ich vielleicht auch ein anderes (Textarea-)Feld selbst hidden machen kann und das dann nutze. Das versuche ich evtl. nochmal. Aber bestimmt gibt es einen "richtigen" Weg. Ich habe nur leider nichts gefunden, wie man das wohl machen könnte?

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

    Standard

    Aber warum schickst du das Array über das Formular? Du musst doch einfach nur diese Daten bspw. per processFormData Hook bereit stellen.
    » sponsor me via GitHub or Revolut

  5. #5
    Contao-Nutzer
    Registriert seit
    03.12.2014.
    Beiträge
    90

    Standard

    Hach, Spooky, mir ist das auch etwas peinlich aber in meiner Welt ist das mit den Hooks noch schwierig. Ich versuche das Array über das Formular zu schicken, weil ich keinen anderen Weg kenne. Das ist eigentlich die einzige Erklärung. Und sicher auch etwas, weil ich mich nicht so richtig an Hooks traue, auch da mir bisher ein (richtiges) Beispiel. z.B. zu einem der häufig genutzten Hooks, fehlte.

    Aber ich habe mich jetzt mal rangetraut und diesen processFormData Hook mal probiert. Mit dieser Hilfe (https://webcode-blog.de/contao-4-13-...ook-anzulegen/) und der Contao Doku, habe ich es eigentlich recht schnell geschafft, ein Ergebnis (Ausgabe der enthaltenen Formulardaten in Datei) zu erzielen.

    PHP-Code:
    #/src/EventListener/ProcessFormDataListener.php

    namespace App\EventListener;

    use 
    Contao\CoreBundle\DependencyInjection\Attribute\AsHook;
    use 
    Contao\Form;

    class 
    ProcessFormDataListener
    {
        public function 
    onProcessFormData(array $submittedData, array $formData, ?array $files, array $labelsForm $form): void
        
    {
            
    $input json_encode($submittedData);

            
    $xp fopen('submittedData_log.txt''w');
            
    fwrite($xp$input);
            
    fclose($xp);
        }

    Aber ... ist die Nutzung dieses Hooks überhaupt die Lösung? Wenn ich das richtig verstanden habe, verarbeitet er ja nur die Formulardaten und meine Wunschliste ist ja noch nicht Teil des Formulars ... Ich muss die Daten (mein Array) also trotzdem erstmal wieder in das das Form bringen.

    Aber das habe ich jetzt mal, wie weiter unten angedeutet, mit einem Textarea "als Überträger" versucht und das funktioniert auch soweit
    PHP-Code:
    jQuery('#textarea').val(product_inquiry
    . Ich bekomme das Array mit ausgegeben. Aber noch keinen Zeilenumbruch, auch wenn ich das Array vorher auflöse und mit <br> oder mit \n versuche umzubrechen. im späteren E-Mail ist es immer eine Zeile. Ich habe dann mal im Formular ein "normales" Contao Textarea Feld hinzugefügt und dort mal Text mit Zeilenumbruch eingeben ... Der wird in dem E-Mail auch nicht mit Zeilenumbruch ausgegeben ... Hmmm, was muss man denn tun, damit man Zeilenumbrüche im E-Mail bekommt??

    Davon ab ... Ich versuche das mit den Hooks zu üben! Aber wo ich z.B. auch gleich wieder scheitere, ist, wie ich nun in dem Hook einen Wert beeinflussen kann?

    Was müsste ich denn tun, wenn ich z.B. hier aus dem $submittedData ein Key/Value Paar "name":"sm" ändern würde in "name":"Paul Paulsen, Vorbild" und dann eben diesen Wert an das Formular (für ##form_name##) geben will?
    Danke!!

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

    Standard

    Woher genau kommen die Daten und wie steht das Formular in Verbindung zu diesen Daten?
    » sponsor me via GitHub or Revolut

  7. #7
    Wandelndes Contao-Lexikon Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    10.219
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Was genau ist eigentlich dein Ziel?
    ??

  8. #8
    Contao-Nutzer
    Registriert seit
    03.12.2014.
    Beiträge
    90

    Standard

    Moin zusammen,

    sorry, dass ich so lange abwesend sein musste .
    Habe mich jetzt wieder damit beschäftigen können und das noch mal etwas anders gemacht. Ich habe gelernt, dass man die Formulardaten auch gleich wunderbar mit sowas simplem übergeben kann ...

    PHP-Code:
    jQuery('form').on('submit', function (e) {
            
    e.preventDefault();

            
    jQuery.ajax({
                
    type'post',
                
    url'/ajax-database-jobs',
                
    datajQuery('form').serialize(),
                
    success: function (data) {
                    ...
                }
            });
        }); 

    Damit entfällt das ganze rumgehampel mit dem einzelnen Auslesen von oben und das ist natürlich viel einfacher und klarer. Wenn man weiß wie, ist vieles einfacher...

    Aber ... die eigentliche Kernproblematik besteht weiterhin. Ich bekommen in der E-Mail für ein bestimmtes Token keine Zeilenumbrüche ausgegeben. Etwas eingekürzt sieht mein Modul auf der obigen Seite so aus:

    PHP-Code:
    #[AsFrontendModule('inquiryConfirmation', category:'miscellaneous', template:'mod_inquiryConfirmation')]
    class inquiryConfirmation extends AbstractFrontendModuleController
    {
        public function 
    __construct(private NotificationCenter $notificationCenter) {}

        protected function 
    getResponse(Template $templateModuleModel $modelRequest $request): Response
        
    {
            if (\
    Contao\Input::post('transfer_arr') ) {

            
    $order = \Contao\Input::post('transfer_arr');
            ...
                
                
    $orderList '';
                foreach(
    $order as $orderItem) {
                    
    $orderList $orderList $orderItem['item_amount'] . " ";
                    
    $orderList $orderList $orderItem['item_pack_unit'] . " ";
                    
    $orderList $orderList $orderItem['item_product_name'];
                    
    $orderList $orderList "\n";
                }

            
    $notificationId 16;

            
    $tokens = ['order' => $orderList];
            
    $receipts $this->notificationCenter->sendNotification($notificationId$tokens);
            }
            return 
    $template->getResponse();
        }

    In der E-Mail später wird aus
    Code:
    $orderList
    immer ein langer String. Egal wie ich bisher versucht habe $orderList zu bauen ... nichts hat funktioniert und alle Ausgaben werden immer hintereinander in einer Zeile in der E-Mail ausgegeben.

    Ich möchte erreichen, dass im E-Mail später an der Stelle des Tokens
    Code:
    ##order##
    , z.B.

    2 Eimer Wandfarbe Superweiss, 5l
    1 Pinsel Easystreich, lange Borsten
    ...

    steht.

    Ich hoffe nun konnte ich das etwas klarer darstellen? Danke für eure Geduld ;-)

  9. #9
    Contao-Nutzer
    Registriert seit
    03.12.2014.
    Beiträge
    90

    Standard

    Oke, das Problem ist gelöst ...

    Ich habe diesen Artikel gefunden und dort steht quasi die Lösung:

    Im (HTML-)E-Mail muss der Token in den flag-Inserttag eingebettet werden.

    Somit wird aus

    ##order##

    ein

    {{flag::##order##|nl2br}}

    und im fertigen E-Mail erscheinen die Umbrüche ... Magie ...

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
  •