THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

Rejoignez la communauté sur le Discord Thelia : https://discord.gg/YgwpYEE3y3

Offline


Bonjour,

Je n'arrive pas a faire un saut de ligne dans un email txt
un retour chariot simple dans l'editeur marche pas (cela me supprime la ligne)
un \n marche pas (cela m'affiche \n)
un \r\n marche pas (cela m'affiche \r\n)


il faut faire quoi
j'utilise le tpl default-text-layout.tpl avec nofilter

Offline


il faut faire quoi

Pour l'afficher (mais où ?) : {$xyz|nl2br nofilter}


OpenStudio Toulouse

Offline


dans le message de l'email version texte envoye

exemple le template de mail "order_confirmation"

{loop name="order.invoice" type="order" id=$order_id customer="*"}
{loop name="currency.order" type="currency" id=$CURRENCY}
  {assign "orderCurrencySymbol" $SYMBOL}
  {assign var="orderCurrencyIsoCode" value=$ISOCODE}
{/loop}
{intl l="Confirmation de la commande %ref du %date" ref={$REF} date={format_date date=$CREATE_DATE output="date"}}

\n
\r\n
{intl l="Delivery address:"}
........

dans l'email texte recu, je recois

Confirmation de la commande ORD000000000080 du 19/06/2014
\n
\r\n
Adresse de livraison : 
........

Offline


Bon. Inutile d'essayer d'ajouter des \r, \n, \t ou même des \a smile

un retour chariot simple dans l'editeur marche pas (cela me supprime la ligne)

C'est à dire ? Que se passe-t-il exactement ?


OpenStudio Toulouse

Offline


comme dans l'exemple

{intl l="Confirmation de la commande %ref du %date" ref={$REF} date={format_date date=$CREATE_DATE output="date"}}


{intl l="Delivery address:"}

les 2 sauts de ligne donnent

Confirmation de la commande ORD000000000080 du 19/06/2014
Adresse de livraison : 

Comment inserer un saut de ligne ?
pour aerer le texte

Offline


Il y a un petit bug.

En fait, le message est correctement stocké en BD, avec les sauts de ligne. Par contre, dès que tu le modifie dans le B.O., "cela me supprime la ligne", comme tu dis.

Les sauts de ligne qui sont présents en base ne sont pas reportés dans le champ de saisie, du coup, dès que tu valides, les sauts de ligne disparaissent.

En principe, si tu ajoutes les sauts de ligne avant de valider, il seront correctement pris en compte... jusqu'à la prochaine modif.


OpenStudio Toulouse

Offline


je n'utilise pas la version sauvegarde en BD
mais  un template 'order_confirmation.txt'

dans ce fichier j'ai beau faire une mise en page
qu'en on recoit le mail toutes les lignes sont l'une colle a l'autre
le saut de ligne est efface

c'est a l'envoie, je pense qu'ils sont mal interpretes, supprimes

Offline


OK, j'ai trouvé le problème, en ligne 98 de SmartyParser.php

$this->registerFilter('output', array($this, "removeBlankLines"));

La fonction "removeBlankLines" supprime aveuglément toutes les lignes blanches.

Cf. cette issue: https://github.com/thelia/thelia/issues/490


OpenStudio Toulouse

Offline


Roadster31  The Best !!

Offline


The best, the best, faut le dire vite: c'est moi qui l'ai écrit cette méthode...


OpenStudio Toulouse

Offline


lol   tu avais droit a une biere, bon ce sera une demi biere smile

cette ligne de commande est tres utile en fait.
mais devrait se limiter aux premieres lignes

voici le message (source du mail) que l'on recoit apres mise en commentaire de cette fonction

--_=_swift_v4_1403209038_58ee234fdf8943e436ea59adf1c07036_=_
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable









   =20
Confirmation de la commande ORD000000000082 =
du 19/06/2014


Adresse de livraison :=20
---------------------------=

entre quoted-printable et =20 il y a bcps de ligne vide ne faisant pas partie du texte de depart, a part le code

{loop name="order.invoice" type="order" id=$order_id customer="*"}
{loop name="currency.order" type="currency" id=$CURRENCY}
  {assign "orderCurrencySymbol" $SYMBOL}
  {assign var="orderCurrencyIsoCode" value=$ISOCODE}
{/loop}
{intl l="Confirmation de ....

Offline


en modifiant le pattern comme suite

    public function removeBlankLines($tpl_source, \Smarty_Internal_Template $template)
    {
        return preg_replace("/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/A", "\n", $tpl_source);
    }

on limite de force q'au debut du message sinon le pattern est global

Offline


je prefere cette pattern

        return preg_replace("/([\r\n]+)/", "\n", $tpl_source);

Si on veut un saut de ligne, il suffit de mettre un espace sur la ligne
s'il n'y a pas au moins un caractere la ligne est supprimee

qui trouve mieux ?

Offline


je vais tester super wink

Merci Rodney smile

Offline


je prefere mon pattern tongue

il reste trop de ligne vide au debut et dans le corps du message avec cette fonction

Last edited by zzuutt (20-06-2014 08:12:11)

Offline


je prefere mon pattern

Il ne prend pas à compte tous les cas possibles. Le filtre "trimwhitespace" de Smarty est parfaitement adapté à cet usage.

il reste trop de ligne vide au debut et dans le corps du message avec cette fonction

Comment ça ?


OpenStudio Toulouse

Offline


Avec cette fonction j'obtiens cela (source du mail)

Content-Transfer-Encoding: quoted-printable









   =20
Confirmation de la commande ORD000000000090 =
du 20/06/2014
=20
Adresse de livraison :=20
-----------------------------=

avec mon pattern

Content-Transfer-Encoding: quoted-printable


   =20
Confirmation de la commande ORD000000000093 du 20/06/2014
=20
A=
dresse de livraison :=20

Offline


Normal. Ce que tu dois faire pour que ça marche:

1) Placer dans core/lib/Thelia/Core/Template/Smarty/Plugins le fichier outputfilter.trimwhitespace.php

2) En ligne 98 de SmartyParser.php remplacer $this->registerFilter('output', array($this, "removeBlankLines")) par $this->loadFilter('output', "trimwhitespace");

Et voilà.


OpenStudio Toulouse

Offline


voici ce que j'obtiens

 
 
 
 
 
 
     
Confirmation de la commande ORD000000000094 du 20/06/2014
 
Adresse de livraison : 
-----------------------------

zzuutt
xxxxxxxxxxxxxxxxxxxxxxxxxx
Route de 
BPxxx
xxxxxxxxxxxxx
34000, France métropolitaine

 
Adresse de facturation : 
-----------------------------

xx xxxxx
xxxx
route de 
BPxxx
xxxxxxxxxx
34000, France métropolitaine

 
Total de la commande :  176.93 € EUR
Commande N° :  ORD000000000094
Payé par :  Cheque
Statut du paiement : EN ATTENTE
Date d'achat :  20/06/2014
Livré par :  Livraison par colissimo en 72h
 
Articles commandés:
-----------------------------

             
    Article : xxxxxxxxxxxxxxxxx (xxxx03)

    Quantité : 1
    Prix unitaire TTC : 12 €  

             
    Article : xxxxxxxxxxxxxxxxxx (xxx4)

    Quantité : 1
    Prix unitaire TTC : 12 €  

             
    Article : xxxxxxxxxxxxxxxxxxxxxxxxx (xxxx00)


    Température de blanc - Blanc Naturel


    Quantité : 1
    Prix unitaire TTC : 60 €  

             
    Article : xxxxxxxxxxxxxxxxx (xxxxxxxxxxxxx01)


    Température de blanc - Blanc Froid


    Quantité : 1
    Prix unitaire TTC : 66 €  

 
-----------------------------------------
Montant total TTC :    150 €
Frais de port TTC :    26.93 €
Somme totale      :    176.93 €
==================================
 
 
Votre facture est disponible dans la rubrique mon compte sur http://www.

avec le simple pattern

    
Confirmation de la commande ORD000000000092 du 20/06/2014
 
Adresse de livraison : 
-----------------------------
zzuutt
xxxxxxxxxxxxxxxxxxxxxxxxxx
Route de 
BPxxx
xxxxxxxxxxxxx
34000, France métropolitaine
 
Adresse de facturation : 
-----------------------------
xx xxxxx
xxxx
route de 
BPxxx
xxxxxxxxxx
34000, France métropolitaine
 
Total de la commande :  280.13 € EUR
Commande N° :  ORD000000000092
Payé par :  Cheque
Statut du paiement : EN ATTENTE
Date d'achat :  20/06/2014
Livré par :  Livraison par colissimo en 72h
 
Articles commandés:
-----------------------------
             
    Article : xxxxxxxxxxxxxxxx (AxxL501)
    Quantité : 1
    Prix unitaire TTC : 6 € au lieu de 10 € 
             
    Article : xxxxxxxxxxxxxxxxx (AxxL503)
    Quantité : 1
    Prix unitaire TTC : 12 €  
             
    Article : xxxxxxxxxxxxxxx (xx04)
    Température de blanc - Blanc Froid
    Quantité : 1
    Prix unitaire TTC : 12 €  
             
    Article : xxxxxxxxxxxx (xx502)
    Quantité : 1
    Prix unitaire TTC : 12 €  
 
-----------------------------------------
Discount          :    253.2 €
Montant total TTC :    253.2 €
Frais de port TTC :    26.93 €
Somme totale      :    280.13 €
==================================
 
 
Votre facture est disponible dans la rubrique mon compte sur http://www.

c'est mieux avec le simple, les articles sont mieux ranges, alignes , non ?

Last edited by zzuutt (20-06-2014 10:40:21)

Offline


Ca marche parfaitement sur mont installation de Thelia, il n'y a aucune ligne en trop.

Rendez-vous en 2.0.3 smile


OpenStudio Toulouse

Offline


C'est cela qui m'inquiete justement
j'ai l'impression qui chaque ligne loop ou if compte comme un saut de ligne

j'utilise le layout par defaut et le template suivant
voici mon fichier texte

{default_translation_domain domain='email.tempge'}
{loop name="order.invoice" type="order" id=$order_id customer="*"}
{loop name="currency.order" type="currency" id=$CURRENCY}
  {assign "orderCurrencySymbol" $SYMBOL}
  {assign var="orderCurrencyIsoCode" value=$ISOCODE}
{/loop}
{intl l="Confirmation de la commande %ref du %date" ref={$REF} date={format_date date=$CREATE_DATE output="date"}}
 
{intl l="Delivery address:"}
-----------------------------
{loop type="order_address" name="delivery_address" id=$DELIVERY_ADDRESS}
{$FIRSTNAME} {$LASTNAME}
{if $COMPANY != ""}
{$COMPANY}
{/if}
{$ADDRESS1}
{if $ADDRESS2 != ""}
{$ADDRESS2}
{/if}
{if $ADDRESS3 != ""}
{$ADDRESS3}
{/if}
{$CITY}
{$ZIPCODE}, {loop type="country" name="country_delivery" id=$COUNTRY}{$TITLE}{/loop}
{/loop}

{intl l="Billing address:"}
-----------------------------
{loop type="order_address" name="invoice_address" id=$INVOICE_ADDRESS}
{$FIRSTNAME} {$LASTNAME}
{if $COMPANY != ""}
{$COMPANY}
{/if}
{$ADDRESS1}
{if $ADDRESS2 != ""}
{$ADDRESS2}
{/if}
{if $ADDRESS3 != ""}
{$ADDRESS3}
{/if}
{$CITY}
{$ZIPCODE}, {loop type="country" name="country_delivery" id=$COUNTRY}{$TITLE}{/loop}
{/loop}

{intl l="Order Total:"} {$TOTAL_TAXED_AMOUNT} {$orderCurrencySymbol} {$orderCurrencyIsoCode}
{intl l="Order Number:"} {$REF}
{intl l="Paid With:"} {loop name="payment-module" type="module" id=$PAYMENT_MODULE}{$TITLE}{/loop}
{intl l="Payment Status:"} {intl l="PENDING"}
{intl l="Purchase Date:"} {format_date date=$CREATE_DATE output="date"}
{intl l="Delivery method:"} {loop name="delivery-module" type="module" id=$DELIVERY_MODULE}{$TITLE}{/loop}

{intl l="Articles commandés:"}
-----------------------------
{loop type="order_product" name="order-products" order=$ID}
{if $WAS_IN_PROMO == 1}
    {assign "realPrice" $PROMO_PRICE}
    {assign "realTax" $PROMO_PRICE_TAX}
    {assign "realTaxedPrice" $TAXED_PROMO_PRICE}
{else}
    {assign "realPrice" $PRICE}
    {assign "realTax" $PRICE_TAX}
    {assign "realTaxedPrice" $TAXED_PRICE}
{/if}

    {intl l="Article : %item" item=$TITLE} ({$PRODUCT_SALE_ELEMENTS_REF})
{ifloop rel="combinations"}
{loop type="order_product_attribute_combination" name="combinations" order_product=$ID}
    {$ATTRIBUTE_TITLE} - {$ATTRIBUTE_AVAILABILITY_TITLE}
{/loop}
{/ifloop}
    {intl l="Quantité : %qty" qty=$QUANTITY}
    {intl l="Prix unitaire TTC : %amount %currency" amount=$realTaxedPrice currency=$orderCurrencySymbol} {if $WAS_IN_PROMO == 1}{intl l="instead of"} {$PRICE} {$orderCurrencySymbol}{/if}

{/loop}

-----------------------------------------
{if $DISCOUNT}
{intl l="Discount          :    %amount %currency" amount={$DISCOUNT} currency={$orderCurrencySymbol}}
{/if}
{intl l="Montant total TTC :    %amount %currency" amount={$TOTAL_TAXED_AMOUNT - $POSTAGE} currency=$orderCurrencySymbol}
{intl l="Frais de port TTC :    %amount %currency" amount=$POSTAGE currency=$orderCurrencySymbol}
{intl l="Somme totale      :    %amount %currency" amount=$TOTAL_TAXED_AMOUNT currency=$orderCurrencySymbol}
==================================


{intl l="Votre facture est disponible dans la rubrique mon compte sur %url" url={config key="url_site"}}
{/loop}

ca sort correctement de ton cote ?