Land im Serienbrief mit Smarty nur andrucken, wenn es ungleich Deutschland ist

Hallo, wie habt Ihr das Adressfeld eingestellt, so dass im PDF-Serienbriefen das Land nur angedruckt wird, wenn es ungleich Deutschland ist?

Hier ist mein Adressfenster für die CiviMail-Nachrichtenvorlage:

{capture assign=current_employer}{contact.current_employer}{/capture}{if $current_employer} {$current_employer}
{/if}{contact.addressee}
{contact.street_address}
{contact.postal_code} {contact.city}{capture assign=country}{contact.country}{/capture}{if $country != 'Deutschland'}
{contact.country} {else}{/if}

Ich habe Smarty aktiviert und nutze Civi 5.50.1 auf WordPress 6.0.2.

Der if-Ausdruck beim current_employer funktioniert. Benutze ich aber meinen if-Ausdruck beim country, dann stürzt WordPress mit einem kritischen Fehler ab. Ich habe um den Ausdruck „Deutschland“ schon verschiedene Klammern (’ " etc.) ausprobiert, aber bin bisher erfolglos geblieben.

Das Adressaufkleberformat unter Lokalisierung → Mailing Labels hat diese Option als Ankreuzfeld, dort klappt es einwandfrei.

Hat jemand eine Idee, wie ich das richtig umsetze?

Sonnige Grüße aus Berlin
Torben

Spannend! Ich lese mal mit…

Lieber @torben.bertram, ich würde an Deiner Stelle einfach die Erweiterung Fuzion Token nutzen. Die stellt u.a. den Token {address.address_block} bereit, der Dir nicht nur die Formatierung abnimmt, sondern Dein in der Lokalisierung eingestelltes „Standardland“ auch per default weg lässt.

Was Deinen Smarty-Code betrifft, sind mir allerdings noch zwei Dinge unklar:

  1. Warum tut er nicht was er soll? Habe mal kurz in einem Testsystem ein PDF erzeugt und bei mir funktionierte es (5.52.3 auf WordPress 6.0.2). Wo hast Du den Code denn nun genau eingesetzt und vor allem: Was steht denn im PHP Error Log?
  2. Der erste Teil zielt vermutlich auf ein Szenario ab, dass Du eigentlich eine Person in einer Organisation über deren Organisationsadresse anschreiben willst, oder? Wäre es da nicht sinnvoller die Adresse der Organisation im Individuum mitzubenutzen („Die Adresse eines anderen Kontakts mitnutzen“)? Sonst können eine Menge komische Dinge passieren, wie z.B. jemand trägt die Privatanschrift der Person als Hauptadresse ein, später kommt ein Arbeitgeber dazu, Postbote findet Firmenschild nicht…

Punkt 2 finde ich übrigens auch deshalb sehr spannend, weil ich kürzlich in einem anderen Zusammenhang in einem Projekt darüber nachgedacht und einen Custom Token für Fuzion Token geschrieben habe, der sich dann den Adressaten vom Organisationskontakt holt, wenn die Adresse eine geteilte ist (und nur dann). Bei Interesse teile ich das natürlich gern.

1 „Gefällt mir“

Hallo zusammen,
im Zuge meiner Recherche, was sich Fundraising-User wünschen, steht das Adressmanagement hoch im Kurs und es gibt viele Fragen und Wünsche.
Sollten wir zu diesem Thema ein eigenes Topic anlegen?
LG Kai

Moin @Andreas, danke! Der Token {address.address_block} scheint genau das zu sein, was ich benötige.

Weshalb mein Smarty-Code nicht funktioniert, würde ich dennoch gerne herausfinden. Unter Drupal 7.90 mit Civi 5.50.1 tritt der selbe Fehler auf, unter Drupal 9.4.5 mit Civi 5.50.4 im Vanilla Zustand funktioniert der Smarty-Code. Ich scheine da also irgendetwas fehlkonfiguriert zu haben.

Dein zweiter Hinweis ist sehr valide: hier passt es beim Datenmodell gerade, solange ein Business-Kontakt keine Privatadresse als primäre Adresse markiert hat. Ersetzt Dein Custom Token dann den {address.address_block} oder ergänzt es parallel? Für Briefvorlagen finde ich wichtig, nur einen Token für alle Anwendungsfälle zu benutzen. Würde mich freuen, wenn Du mir Deine Lösung zeigen magst.

Keine schlechte Idee. Dann auch mit den Kommunikationspräferenzen, die ja vorhanden sind, aber meist gar nicht vollständig genutzt werden.

Nachrichtlich hier noch mein Fehler:

Fatal error: Smarty error: [in evaluated template line 128]: syntax error: unidentified token '#39;Deutschland'' (Smarty_Compiler.class.php, line 1410) in /var/www/vhosts/[Domain]/httpdocs/wp-content/plugins/civicrm/civicrm/packages/Smarty/Smarty.class.php on line 1100

Also doch etwas rund um Deutschland. Muss ich die ’ oder " um ‚#39;Deutschland‘’ anders machen oder escapen?

Hier also der Custom Token für den Adressaten aus geteilten (primären) Adressen: Civiservice / Custom Tokens / Shared Adressee · GitLab – dort habe ich auch kurz beschrieben, wie man den Token einrichtet.

Das macht er nun also:

Hier die Adresse in meinem Kontakt in einem Testsystem:

grafik

Der Fuzion Token {address.address_block} ist schonmal so nett und formatiert die Anschrift und entfernt abhängig von der Lokalisierung wie erläutert auch das Deutschland:

grafik

Die Post würde aber nicht ankommen, da ich nicht in Wiesbaden wohne.

Mit {sharedaddressee.sharedaddress_addressee}{address.address_block} erhalte ich nun:

grafik

Der zusätzliche Umbruch ist im Token integriert, so dass auch bei einer „einfachen“ (nicht geteilten) Hauptanschrift der Adressblock korrekt formatiert wird. Wenn man den Wert mal ohne Umbruch braucht, gibt es die Variante {sharedaddressee.sharedaddress_addressee_nobreak}.

Das ganze kann man natürlich leicht noch erweitern, z.B. um ein c/o oder was auch immer. Und wie gesagt ist es auch noch recht frisch – der Praxistest steht noch aus. Umso schöner, wenn auch andere hier mitdenken oder weiterentwickeln.

1 „Gefällt mir“