Jump to content
  • 0
Shad86

[gelöst] Zeilenumbruch bei Varianten in Bestätigungsmail

Question

Posted (edited)

Hi,

im Prinzip versuche ich bei unserem 1.7.2.4 Shop bei der new_order Mail die ich bei einer Bestellung bekomme, die Varianten der Produkte optisch besser zu gliedern.

Nun bin ich so weit das ich weiß, die Cart.php definiert den kompletten Block der in der new_order.html mit {items} abgerufen wird.

Dort kann ich in folgende Zeile:

foreach ($result as $row) {
            self::$_attributesLists[$row['id_product_attribute'] . '-' . $id_lang]['attributes'] .= $row['public_group_name'] . ' : ' . $row['attribute_name'] . '<br />' . $separator . ' ';
            self::$_attributesLists[$row['id_product_attribute'] . '-' . $id_lang]['attributes_small'] .= $row['attribute_name'] . $separator . ' ';
        }

zwar das <br /> einfügen, das wird aber auch einfach nur so angezeigt statt umgesetzt. Selbes Spiel mit \n.

Hat irgendwer eine Idee was ich bei meinem angegebenen Code in die zweite Reihe packen kann um tatsächlich einen Zeilenumbruch umgesetzt zu bekommen?

 

Freue mich auf Antwort.

Edited by Shad86 (see edit history)

Share this post


Link to post
Share on other sites

17 answers to this question

Recommended Posts

  • 0

Ich versuche rumzurätseln, aber du könntest das wirklich besser erklären, ist das jetzt der Originalcode oder hast du da ein br bereits eingesetzt? Wie ist die Ausgabe und wie soll sie aussehen? Ggf. versuche, statt dem Tag einfach ein Wort wie "Test" einzusetzen und schau, ob das angezeigt wird, evtl. müssen auch noch Caches gelöscht werden.

Share this post


Link to post
Share on other sites
  • 0

Steuerzeichen sollte man nicht in Anführungszeichen einbetten, sonst werden sie wie Text behandelt und angezeigt.

Share this post


Link to post
Share on other sites
  • 0

Ich denke die Item werden im Modul in ps_mailalerts.php (Zeile 320ff) definiert. Hier kannst du auch das HTML anpassen (am besten als Override wegen möglicher Updates des Moduls). "Witzig" das Prestashop sich bei dem Modul nicht an die eigenen Entwicklungsvorgaben zur Trennung von Logik und Darstellung hält.

grafik.thumb.png.9ad8a4f78ba03bbf57f42ae80d2d3feb.png

Share this post


Link to post
Share on other sites
  • 0

Hi, vielen dank für eure Antworten.

@rictools sorry, das <br> habe ich da rein gesetzt. Grundsätzlich ist es da auch an der richtigen stelle, es wird zumindest genau da angezeigt wo ich es haben möchte aber es wird einfach so angezeigt und nicht ausgeführt. Also zwischen den Varianten steht wortwörtlich <br>.

@Claudiocool Also lasse ich die Anführungszeichen einfach weg? Habe ich gerade getestet und dann bekomme ich nur noch eine weiße Seite. Caches sind in dem Testshop alle deaktiviert und Browser läuft im Inkognito Modus.

@JBW Grundsätzlich hast du natürlich recht aber in der mailalerts Datei wird nur der komplette Block abgerufen. Produktname und alle Varianten. Aber ich möchte den Break zwischen die einzelnen Varianten packen um diese einzelne pro Zeile und damit wesentlich übersichtlicher zu haben.

Genauerer Screenshot folgt gleich wenn der PC hier nicht mehr rum zickt.

Share this post


Link to post
Share on other sites
  • 0
18 minutes ago, Shad86 said:

@JBW Grundsätzlich hast du natürlich recht aber in der mailalerts Datei wird nur der komplette Block abgerufen. Produktname und alle Varianten. Aber ich möchte den Break zwischen die einzelnen Varianten packen um diese einzelne pro Zeile und damit wesentlich übersichtlicher zu haben.

In dem von mir geposteten Anschnitt des Codes wird genau der Code für das von dir genannte $items erzeugt. Hier wird zwar ein bereits zusammengesetzter String $product['attributes_small'] verwendet, aber das hindert dich ja nicht daran diesen durch deine eigene Variante zu ersetzen (bzw. einfacher, zu erweitern). Wenns aber eh nur um einen <br< geht dann nutzte doch z.b. einen replace direkt im Mailtemplate und ersetzte deine Separator durch Separator<br>.
Auf keinen Fall würde ich etwas in Cart.php direkt ändern - das kann Auswirkungen auf viele Stellen deines Shops haben.

Share this post


Link to post
Share on other sites
  • 0

Hi,

In der Datei war ich vorher auch zu Gange, bin dort aber nicht wirklich weiter gekommen. Alles was ich gemacht habe hat eine weiße Seite hervorgerufen. Also habe ich versucht weiter vorne ein zu greifen, wo attributes_small definiert wird. Von dem Separator wollte ich mich fern halten weil ich nicht wusste wo der noch genutzt wird.

Hier ist endlich mal der Screenshot der Bestätigungsmail. Die Mail habe ich schon um einiges umgebaut aber in dem rot markierten Bereich, bekomme ich einfach keine Umbrüche rein, die ich mit roten Linien eingezeichnet hab.

Bleibe ich in der ps_emailalerts.php müsste ja die Zeile:

.(isset($product['attributes_small']) ? ' '.$product['attributes_small'] : '')

dafür zuständig sein. Aber selbst wenn ich da an irgendeine Stelle ein Test packe, bekomme ich nur noch eine weiße Seite.

laufzettel.png

Share this post


Link to post
Share on other sites
  • 0

Weiße Seite heißt du hast einen (Syntax)-Fehler im Code - aktiviere den Debug Modus um die Details zu sehen. Cache löschen nicht vergessen.

Als Vorschlag (nicht gestestet). In Zeile 326 in ps_mailalerts.php

.(isset($product['attributes_small']) ? ' '.str_replace(Configuration::get('PS_ATTRIBUTE_ANCHOR_SEPARATOR'), Configuration::get('PS_ATTRIBUTE_ANCHOR_SEPARATOR').'</br>', $product['attributes_small']) : '')

 

Share this post


Link to post
Share on other sites
  • 0

Hi JBW,

ich habe auch Syntaxfehler vermutet, habe deshalb einige Stellen und Schreibweisen ausprobiert. Entweder weiße Seite oder es ändert einfach nichts. Ich verstehe es nicht.

Deine Zeile habe ich natürlich auch getestet, sieht genauso aus wie sonst. Obwohl er keinen Cache anlegt, trotzdem Cache geleert, trotzdem kein unterschied. Das wirklich kein Cache angelegt wird, weiß ich weil es sofort funktioniert wenn ich zwei Zeilen weiter oben die Schriftfarbe des Bereichs auf Rot setze. Setze ich ein Test oder das <br> an die falsche stelle bekomme ich ja auch direkt die weiße Seite. Würde ja auch nicht passieren wenn die Datei gecachted wird.

Ich bekomme zwischen die Varianten aber auch nichtmal ein Test hin. Das hat nur in der cart.php geklappt.

Saß Dienstag den ganzen Tag daran, nur die Varianten in einzelne Zeilen zu bekommen und dadurch die Mail wesentlich übersichtlicher zu machen.

 

Ist es Absicht das bei dir vor $product['attributes_small'] ein Komma statt einem Punkt ist?

Share this post


Link to post
Share on other sites
  • 0
Posted (edited)

Ah sorry, habs mir jetzt genauer angesehen. Es geht hier eigentlich um $product['product_name'], da steht schon die komplette Variante drin. Da kannst den replace also in Zeile 325 machen:
 

<strong><a href="'.$url.'">'.str_replace(Configuration::get('PS_ATTRIBUTE_ANCHOR_SEPARATOR'), Configuration::get('PS_ATTRIBUTE_ANCHOR_SEPARATOR').'<br />', $product['product_name']).'</a>'

 

Edited by JBW (see edit history)

Share this post


Link to post
Share on other sites
  • 0
Posted (edited)

Das Komma ist da richtig, es trennt die drei Argumente für die Funktion.

Bei deinem ersten Screenshot müßte die Ausgabe <br /> lauten, nicht wie von dir (wohl versehentlich) geschrieben <br>. Aber bei solchen Sachen sollte man sehr genau sein, das System verzeiht auch kleinste Vertipper nicht.

Ich habe nach wie vor das Problem, daß ich nicht weiß, wie genau der Originalcode (also ohne daß du einen br-Tag (mit oder ohne den Punkten?) eingefügt hast. Ich bin nun einmal kein Profi in solchen Dingen und um das analysieren zu können brauche ich Originalcode (am besten auch nicht nur einen so kurzen Ausschnitt), geänderten Code und wie die Ausgabe damit aussieht.

Edited by rictools (see edit history)

Share this post


Link to post
Share on other sites
  • 0

Wie gesagt, war nicht getestet. Ich zweiten korrekten Beispiel wars bereits korrigiert.

Share this post


Link to post
Share on other sites
  • 0

Ok.... Sollten solche Sachen nicht im Template gemacht werden? Dass oben das <br > angezeigt wird, liegt an den Anführungszeichen. Um das zu erreichen müsste man die Ausgabe zerpflücken. Vielleicht geht das im Template eleganter.

Share this post


Link to post
Share on other sites
  • 0
1 minute ago, Claudiocool said:

Ok.... Sollten solche Sachen nicht im Template gemacht werden?

Sollte man, ist aber vom Modul so nicht vorgesehen...

Share this post


Link to post
Share on other sites
  • 0

Guten Morgen,

@JBW Werde gleich auf jeden Fall nochmal etwas rum testen. Aber es geht tatsächlich um die Attribute. $product['product_name'] Würde ja automatisch in einer eigenen Zeile stehen wenn ich vor die Attribute das <br /> bekomme.

@rictools War tatsächlich ein Flüchtigkeitsfehler. Um auf nummer Sicher zu gehen probiere ich gleich trotzdem nochmal mit <br /> ein paar Varianten.

@Claudiocool Das ist das Problem, im Template wird einfach nur {items} in der Tabelle abgerufen. In der ps_emailalerts.php wird {items} mit $items_table definiert und auch das wird da genauer aufgelöst.

$items_table .=
                '<tr style="background-color:'.($key % 2 ? '#DDE2E6' : '#EBECEE').';">
					<td style="padding:0.6em 0.4em;">'.$product['product_reference'].'</td>
					<td style="padding:0.6em 0.4em;">
						'.$product['product_name'].''
                           /* .(isset($product['attributes_small']) ? ''.$product['attributes_small'] : '') */
						   .(isset($product['attributes_small']) ? ' '.str_replace(Configuration::get('PS_ATTRIBUTE_ANCHOR_SEPARATOR'), Configuration::get('PS_ATTRIBUTE_ANCHOR_SEPARATOR').'<br />'. $product['attributes_small']) : '')
                            .(!empty($customization_text) ? '<br />'.$customization_text : '')
                        .'
					</td>
					<td style="padding:0.6em 0.4em; text-align:center;">'.(int) $product['product_quantity'].'</td>
				</tr>

Das ist der komplette Absatz dazu. Hab da z.B. schon die Preisanzeige raus geworfen und noch einiges. Ist jetzt die Version mit der Änderung von JBW und dem korrigierten <br />. Teste gleich mal ob es so jetzt geht.

Share this post


Link to post
Share on other sites
  • 0

Wie gesagt stehen die Attribute bereits in product_name - attributes_small ist bei mir leer.

Share this post


Link to post
Share on other sites
  • 0

Das ändert natürlich alles und würde erklären wieso so gar nichts passiert. Ich teste das auch nochmal. Vielen Dank soweit.

Share this post


Link to post
Share on other sites
  • 0

@JBW Das war es tatsächlich. Habe deine letzte gepostete Zeile eingefügt und es wird richtig umbrochen. Vielen, vielen Dank.

Nochmal für alle Suchenden:

<strong><a href="'.$url.'">'.str_replace(Configuration::get('PS_ATTRIBUTE_ANCHOR_SEPARATOR'), Configuration::get('PS_ATTRIBUTE_ANCHOR_SEPARATOR').'<br />', $product['product_name']).'</a>'

Sorgt dafür das in der Mail die Varianten in einzelnen Zeilen stehen.

Ich mache mir das ganze jetzt noch etwas hübsch und evtl. bunt damit es für die Leute in der Produktion eindeutiger wird aber grundsätzlich klappt es so. Nochmal vielen Dank.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More