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

1 „Gefällt mir“

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.

1 „Gefällt mir“

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“

Ein Teil der Diskussion ging ja zuletzt auch in Richtung „Token für Daten von verknüpften Kontakten bzw. von AdressinhaberInnen“. Daher sei hier neben den Ausführungen von Andreas auch die Erweiterung „Additional Token“ erwähnt - je nach Anwendungsfall ist das vielleicht auch sinnvoll. Neben Token für den/die „HauptadressinhaberIn“ werden auch Token pro Adresskategorie bereitgestellt und ein paar andere praktische Dinge wie bspw. das gegenwärtige Datum im deutschen Format.

Hallo @Fabian_Schuttenberg , das sieht aus wie eine sehr praktische Erweiterung. Sie scheint mir aber unter PHP 8.1 nicht zu laufen.

Das kann leider gut sein - wir haben ja inzwischen eine dreistellige Anzahl von CiviCRM-Erweiterungen veröffentlicht. Wir können nur bei den kritischsten proaktiv an der php8-Kompatibilität arbeiten da wir nicht mehr Kapazitäten haben und das natürlich auch erstmal niemand finanziert.

Oft sind ja gar nicht so große Codeänderungen erforderlich aber mit der Analyse, dem Testen von Anpassungen und einem neuen Release kommen dann doch schnell mal ein paar Stunden zusammen. Kurz gesagt: Falls Du einen (getesteten) Pullrequest machen könntest oder falls Ihr ein paar Stunden Finanzierung übrig habt, freuen wir uns natürlich. Nun will ich aber nicht weiter diesen Thread hier kapern (leider gibt es glaube ich keine Funktion eine Antwort nur zu kommentieren). Bei Bedarf gerne mehr als separates Thema oder private Nachricht auf irgendeinem Kanal.

Weil ich das gestern auch mal wieder hatte: Falls du mit dem CK-Editor, also dem WYSIWYG-Editor im CiviCRM arbeitest und zwischen Quellcode und WYSIWYG-Ansicht wechselst, kann es unter Umständen (je nach Konfiguration, s.u.) passieren, dass bestimmte Code-Bestandteile maskiert werden. Zum Beispiel werden aus doppelten Anführungszeichen → " oder aus einfachen → '
Abhilfe schafft dann nur, dass man im CiviCRM in die Editor-Einstellungen navigiert (Administration » Daten und Anzeigen anpassen » Voreinstellungen für die Anzeige » Button Configure CKEditor) und dann unter Advanced Options die Option entities (Boolean) = false hinzufügt. Danach unbedingt Browser Cache löschen (es kann einen wahnsinnig machen, wenn man das vergisst xD) und dann sollten beim Umschalten zwischen Quellcode und WYSIWYG-Ansicht keine Anführungszeichen mehr umgewandelt werden, so dass dann auch Smarty-Code nicht mehr zerschossen wird.

Zeit vergeht, Adressblock besteht!

Also {address.address_block} ist gut geeignet für Privatpersonen, danke für die Hinweise. Damit ist das Ticket hier erledigt, weil das mit dem Land ist nun berücksichtigt :slight_smile:

Allerdings habe ich „Shared Adressee“ von @Andreas nicht zum Fliegen bekommen: ein entsprechender Token erscheint einfach nicht zum Auswählen im Fuzions Token Bereich. Hat jemand das auch schon gehabt?

@torben.bertram, hast Du auf Administration → Kommunikation → Enabled Tokens den Token aktiviert? Und stimmt der Custom-PHP-Pfad unter Administration → Systemeinstellungen → Verzeichnisse? Wenn wie auf gitlab beschrieben wäre das: [civicrm.files]/custom_php/ (beim Ändern vor Aufrufen der Fuzion Token Config-Seite den Cache leeren)

Hi @Andreas , was für ein Anfängerfehler: natürlich muss man den Cache leeren! Jetzt geht’s! Cool, danke Dir!!!

Was jetzt noch nicht geht: Kontakte mit Arbeitgeber-Beziehung und primärer Privatadresse. Aber das muss ich ein anderes Mal klären.

Schön, dass es klappt!

Nachrichtlich noch meine aktuelle Lösung:

{capture assign=country}{contact.country}{/capture}{if $country ne ‚Deutschland‘} {$country}{/if}

also ne und nicht != in der if-Klausel.

1 „Gefällt mir“

Und wen es interessiert: hier der komplette Adressblock mit Arbeitgeber und if-Schleifen… Funktioniert bei Briefen und Rechnungen (jeweils auf die Hauptadresse).

{capture assign=display_name}{contact.employer_id.display_name}{/capture}{capture assign=adresstype}{contact.location_type_id}{/capture}
{if $adresstype eq 2} {$display_name}

{/if} {capture assign=addressee}{contact.addressee}{/capture}{if $addressee} {$addressee}

{/if} {capture assign=supplemental_address_1}{contact.supplemental_address_1}{/capture}{if $supplemental_address_1} {$supplemental_address_1}

{/if} {contact.street_address}

{contact.postal_code}{ }{contact.city}

{capture assign=country}{contact.country}{/capture}{if $country ne ‚Deutschland‘} {$country}{/if}

1 „Gefällt mir“