Das Plugin stellt die Palette Platzerhalterwerte zur Verfügung. Die Palette zeigt alle Informationen über den ersten Platzhalter der aktuellen Dokumentauswahl. In der Palette können lokale Einstellungen des Platzhalters geändert werden und die Funktionsvariablen des Platzhalters konfiguriert werden. Mit einer Partner-Lizenz können zusätzlich die Platzhalterskripte editiert werden. Im unteren Fensterbereich können zudem zusätzliche Skripte wie Gestaltungsregeln und Aufbauhilfe-Skripte editiert werden.

Die Werte aller in Schrägschrift beschrifteten Felder können im Dokument geändert werden. Verwenden Sie diese Möglichkeit eher sparsam und nur, wenn Sie in der Entwicklungs- und Testphase sind.

Klicken Sie auf um Skripte zu editieren.

Die Werte der Platzhalter können auch über cScript gesetzt werden, siehe dazu die Funktion placeholder::change_tags.

Im vierten Fensterbereich sehen sie die Liste der definierten Funktionsvariablen mit denen Platzhalterskripte individualisiert werden können. Mehr dazu finden sie unter Funktionsvariablen.

Im fünften Fensterbereich (hier mit der Beschriftung "unbenanntes Objekt" sehen Sie die ID des Objektes, mit dem der Platzhalter verknüpft ist. IDs bestehen immer aus drei Zahlen und einem String.

Für Entwickler-Zwecke können Sie hier die ID in die Zwischenablage kopieren.

Im untersten Fensterbereich können Sie beliebige in Ihrem Datenpool definierte Aktionen editieren. Wählen Sie die Aktion im Popup Aktion aus. Die ID der Aktion wird ins Feld Skript eingetragen. Mit können Sie das Skript editieren. Sie können die ID natürlich auch gleich selbst in das Feld eintragen.

Alternativ können Sie hier auch den Pfad einer Include-Datei (z.B. [pubserver]/placeholderUtils.h) eintragen und den Inalt dieser Datei für Ihre Tests temporär ändern. Die Änderungen werden nicht in den Datenbestand zurückgeschrieben und gehen mit dem Ende der Datenverbindung verloren!

Mit dem Sichern-Button können Sie Aktionen und Includes des PubServers direkt auf Ihren Rechner kopieren. Achtung : Diese Option wird ausschließlich bei aktiven Verbindungen zu einem PubServer unterstützt!

Attribut Beschreibung
ID und Name Die ID eines Platzhalters muss eindeutig sein. Der Name wird nur in der Platzhalter-Palette verwendet.
Bereich Über dfen Bereich werden eine Gruppierungen von Platzhaltern ermöglicht, die es Benutzern erleichtern sollen, die gewünschten Platzhalter zu finden.
Farbe Platzhalter können im Text farbig hinterlegt werden: . Zur besseren Unterscheidung können Platzhalter auch mit anderen in der Datenkonfiguration definierter Farben hinterlegt werden.
Typ
Name SQL XML/SOAP Bemerkungen
Text 1 text
Tetxrahmen 2 textframe
Bildrahmen 3 imageframe
XML Elemente 4 xml element zur Zeit nicht verwendet
Dokument 5 document zur Zeit nicht verwendet
Wiederholende Rahmen 6 multi frames
Wiederholende Texte 7 multi text zur Zeit nicht verwendet
Tabellen 8 table Setzt die Definition von Tabellentemplates voraus
Querverweise 9 crossref Definition von Querverweisen
Serientext 10 serialtext Textplatzhalter für Serienbriefe
Serienbild 11 serialframe Bildplatzhalter für Serienbriefe
Serientemplate 12 serialpageitem Templates für Serienbriefe
Klasse Die Platzhalterklasse stellt sicher, dass ein Platzhalter nur mit dem richtigen Objekttyp (z.B. mit Produkten) verknüpft werden kann. Sie entspricht der ClassID der Comet-Paletten.
Laden/Tabelle, Schreiben, Sync, Objektname, Textformat IDs der Aktionen, die in der entsprechenden Situation ausgeführt werden.
Tabelle [ab Version 1.4] Bei Tabellenplatzhaltern enthält die Load-ID die Aktion, mit der die ID des Tabellentemplates ermittelt wird.
Textformat/Aufbauskript/Produktname

Name oder ID eines Textstiles, mit dem der Platzhaltertext automatisch formatiert wird

Aufbauskript Bei wiederholenden Elementen ID der Aktion, die die wiederholenden Elemente ermittelt
Produktname [ab Version 1.4] ID der Aktion, mit der der Name des Objektes ermittelt wird, das mit der Tabelle verknüpft wird
Trenntexte [ab v3.2.3 R2450] Statische Texte, die beim Laden des Platzhalters vor/hinter dem Platzhalter ins Dokument eingefügt werden, siehe hier.
Synchronstatus Soll der Platzhalter eine Synchronstatus zeigen oder nicht?
Aktualisierungsverhalten Synchronisieren kann aufwendig sein. Platzhalter können diese Aktion daher unter Umständen unterdrücken
Objektinfos Mit welchem Objekt ist der Platzhalter verknüpft.

Aus Performance-Gründen werden beim Verknüpfen eines Textes oder Rahmens mit einem Platzhalter die im Datenpool hinterlegten Definitionen des Platzhalters in das Dokument übernommen. Spätere Änderungen der Platzhalterdefinition im Datenpool haben daher keinen Einfluss mehr auf das Dokument.

Platzhalterdefinitionen des Dokumentes können aktualisiert werden. Wählen Sie dazu in der Palette Platzhalter den Eintrag

    Platzhalterdefinitionen aktualisierten

Wenn Sie Templates verwenden, müssen Sie geänderte Platzhalterdefinitionen natürlich auch in allen Templates anpassen.

Alle in der Palette mit Schrägschrift beschriebenen Platzhalterwerte können manuell geändert werden. Wertänderungen werden beim Editieren sofort übernommen. Sie gelten jeweils für die aktuelle Dokumentauswahl. Text- oder Tabellenplatzhalter, die nur teilweise in der aktuellen Textauswahl liegen, werden ebenfalls geändert. (Um die Werte eines Platzhalters zu ändern, genügt es also, den Textcursor irgenwo innerhalb des Platzhalters zu setzen.)

cScript verfügt über eine Reihe von Funktionen, mit denen aktuelle Platzhalterwerte des Dokumentes gelesen und geändert werden können, siehe dazu insbesondere die Dokumentation des Moduls placeholder.

Die Eigenschaft Textplatzhalter ist ein Textattribut wie z.B. Schriftgröße oder die Farbe. InDesign® organisiert Texte in sogenannten Chunks, bei denen jeweils alle Textattribute gleich sind.

Der Text "bbb ccc ddd eee" besteht aus vier Chunks:

Legt man über "bbb ccc ddd eee" einen Platzhalter, besteht der Text weiter aus vier Chunks. Aber jeder Chunk hat zusätzlich die jeweils gleichen Platzhalter-Attribute. Um die Grenzen des Platzhalters zu ermitteln, müssen also auch die Chunks der Umgebung überprüft werden: Solange ein Chunk die gleichen Platzhalter-Attribute hat, gehört der Text noch zum Platzhalter. Angenommen, vor dem Text würde jetzt der gleiche Platzhalter noch einmal liegen, könnte diese Prüfung den Unterschied natürlich nicht sehen und den Platzhalter entsprechend nach vorne erweitern. Zwischen zwei gleichen Platzhaltern muß also mindestens ein Trennzeichen liegen!

Trennzeichen zwischen gleichen Platzhaltern sind kein diskutierbares Implementierungsdetail. Sie ergeben sich zwangsläufig aus der in InDesign® verwendeten Verwaltung formatierten Textes!

Als Trennzeichen eignen sich besonders HAIR SPACE <0x200A> oder noch besser ZERO WITH SPACE <0x200B>. Platzhaltertrenntexte sind Teil des Platzhalters und können nicht als Platzhalter-Trenner verwendet werden!

Platzhalter sind gleich, wenn folgende Bedingungen erfüllt sind:

  1. Gleiche Platzhalter-ID
  2. Gleiche Objekt-ID
  3. [ab v4.1.6 R25256] Gleiche Werte der Funktionsvariablen. Experimentell! Sollte diese Prüfung einen unerwartet hohen Supportaufwand oder unerwartete Seiteneffekte haben, werden wir diese Prüfung wieder entfernen!

Bei gleichen Platzhaltern ohne Trennzeichen müssen Sie also darauf achten, den ersten Platzhalter zuerst entweder mit einem Objekt zu verknüpfen und/oder seine Funktionsvariablen vom Default zu einem lokalen Wert zu ändern! Andernfalls wird der zweite Platzhalter sofort mit dem ersten Platzhalter verbunden! Änderungen der Verlinkung oder der Werte der Funktionsvariablen können zum Verschmelzen der Platzhalter führen!

[ab Version 1.4]

Platzhalter können automatisch Tabellen einfügen und aufbauen. Zur besseren Unterscheidung sind Tabellenplatzhalter im Dokument schachbrettartig hinterlegt. Wird ein Tabellenplatzhalter mit einem Objekt verknüpft, wird der Text des Platzhalters durch die gewünschte Tabelle ersetzt. Die Tabelle wird aufgebaut und ihr Inhalt geladen.

Tabellenplatzhalter werden wie alle anderen Platzhalter auch definiert. Als Plazhaltertyp geben Sie 8 (Datenbanken) oder "table" (XML und SOAP) an.

In der Laden-ID des Platzhalters wird die ID einer Aktion angegeben, mit der die TabellenID bestimmt wird. In diesem Skript wird in der globalen Variablen gTableID die ID eines Tabellentemplates angegeben.

Hier ein Beispielskript. Achten Sie darauf, dass gTableID ein Zeiger ist - oder einfacher gesagt, vergessen Sie bitte nicht den Stern (*) vor gTableID.

int main ()
{
	showmessage ("Tabellenauswahl");   

    *gTableID = 34;
    
    return 0;
}

In der Palette des Tabellenaufbau kann auf der Karte Aktuelle Verknüpfungen der Name des Objektes angezeigt werden, mit dem die Tabelle verlinkt ist. Diesen Namen können Sie mit dem Feld Textformat/Aufbauskript/Produktname des Platzhalters definieren. Geben Sie hier die ID einer Aktion an, die den Namen berechnet. Diese Aktion muss eine SQL-/XMLQuery-Anweisung sein, die genau eine Stringspalte als Ergebnis liefert.

Hier ein XMLQuery-Beispiel zur Festlegung des Produktnamens.

"$MYFILE"
select name node products.product where id = <ID>

Die im Laden-Skript definierte Tabellen-ID sollte auf ein existierendes Tabellentemplate verweisen. Zum Anlegen solcher Templates siehe hier.

Beim Ersetzen des Platzhalters durch eine Tabelle werden die Platzhalter-ID und der ursprüngliche Paltzhaltertext in der neuen Tabelle hinterlegt. Der Text enthält Formatierungen. Es werden maximal 2000 Zeichen aufgehoben. Sie können eine sogenannte verwaltete Tabelle wieder durch den ursprünlichen Platzhalter ersetzen. Wählen Sie dazu in der Palette Platzhalter oder im Menü Plug-ins -> Platzhalter (Zusatzmodule statt Plug-ins in Versionen vor InDesign® 2025) einen der Einträge

    Alle verwalteten Tabellen durch Platzhalter ersetzen

    Tabelle durch Platzhalter ersetzen

Die hinterlegten Informationen werde beim Neuverknüpfen von Texten verwendet. Alle verwalteten Tabellen des Textes werden vor dem Verlinken mit einem neuen Produkt (Shift-Klick in die erste Spalte des Produktes oder placeholder::link mit autoLoad = 1) in ihren Originalzustand zurückversetzt und nach dem Verknüpfen neu aufgebaut.

[ab v3.2.3 R2450] Text- und Tabellenplatzhalter können vor und nach dem eigentlichen Platzhalter Trenntexte einfügen, die beim Aktualisieren des Platzhalters automatisch ins Dokument eingefügt werden. Der dabei eingefügte Text wird mit der speziellen Kennung <outw2> versehen, die sicherstellt, dass bei Änderungen des Platzhalterinhaltes, des Trenntextes in der Platzhalterdefinition oder im Dokument der alte Trenntext vollständig entfernt bzw. aktualisiert werden kann.

Trenntext wird mit einer Zickzack-Linie unter dem Text markiert :

Trenntexte eines Platzhalters werden in der Palette Platzhalterwerte im Block Trenntexte gezeigt.

Achtung : Der Block Trenntexte ist nur sichtbar, wenn die Palette Platzhalterwerte breit genug ist. Ist der Block unsichtbar, müssen Sie die Palette etwas breiter ziehen.

Und so sieht das im Dokument aus :

Ohne weitere Formatierungsangaben verwenden die Trenntexte die Texteinstellungen vor der Einfügestelle. Damit das auch bei Platzhaltern am Textanfang funktioniert, empfiehlt es sich, vor dem Platzhalter ein unsichtbares Leerzeichen (<0x2000>), das nicht zum Platzhalter gehört, einzufügen.

Durch Editieren der Felder (oder Klicken der jeweiligen -Buttons) können Sie die Trenntexte lokal für den aktuell ausgewählten Textplatzhalter des Dokumentes ändern. Die Änderungen werden im Dokument hinterlegt und beim nächsten Aktualisieren des Platzhalters angewendet. Lediglich wenn Sie den Trenntext komplett entfernen, wird bestehender (sichtbarer) Trenntext auch aus dem Dokument entfernt. Alternativ können Sie auch das jeweilige Symbol klicken und den Wert über den erscheinden Dialog ändern.

Manuelle Änderungen gehen beim Neuverknüpfen von Platzhaltern und beim Aktualisieren der Platzhalter-Definitionen verloren.

Wenn Sie nur wenige Trenntexte verwenden und Platzhalter nicht immer neu setzen, brauchen Sie nicht einmal die unten beschriebenen Erweiterungen des Datenmodelles, um Trenntexte zu verwenden. Die Trenntexte werden zur Ausführzeit direkt aus dem Dokument gelesen.

Alle Trenntexte dürfen die folgenden Shortcuts verwenden. Sie werden vor der Anwendung der Texte jeweils ersetzt :

Shortcut Beschreibung
/t Tabulator
/n

Softreturn

/r

neuer Absatz

/r+

[seit v4.1 R23334] neuer Absatz im Folgestil des aktuellen Absatzes. Die Angabe wird nur als auswertett, wenn der Trenntext keine weiteren Zeichen enthält.

Achtung : An dieser Stelle wird nicht der Backslash, sondern tatsächlich / erwartet.

Trenntexte können direkt angegeben werden oder aus einer Folge von Anweisungen bestehen.

Sie können jeden beliebigen, auch formatierten Text der nicht mit einem '#' beginnt, als Trenntext angeben. Trenntexte dürfen %!TT-Texte sein und Comet-Zeichenformate enthalten. Sonderzeichen können entweder direkt oder in der <0xFFFF>-Schreibweise angegeben werden. Die Schreibweise \FFFF wird an dieser Stelle nicht unterstützt!

Ab v4.1 R2277 dürfen die Trenntexte auch selbst Platzhalter (w2-Tags) enthalten. Beachten Sie aber bitte folgendes:

  1. Die so eingefügten Inhalte sind weiterhin Trenntexte des auslösenden Platzhalters. Die Platzhalter in der Trenntextdefinition werden nach dem Einfügen entfernt.
  2. Das Laden der inneren Platzhalter im direkten Text wird nur vom indirekten TaggedText-Import unterstützt.

Beachten Sie bitte den folgenden Unterschied zwischen %!TT-Texten und normalen Texten:

TaggedText (%!TT et al.) verwendet die Textattribute (Farbe, Größe, Zeichenstil) des aktuellen Absatzes. Vom Absatzstil abweichende Formatierungen innerhalb des Textes müssen im Importtext stehen. Vom Absatzstil abweichende Textattribute an der Einfügestelle werden beim Import von TaggedText nicht weitergeführt.

Sollen lokale Abweichungen vom Absatzstil weitergeführt werden, muß der Text unformatiert (also ohne %!TT et al.) eingefügt werden.

Anweisungsfolgen für Trenntexte beginnen mit einem #. Danach dürfen beliebig viele durch Leerzeichen getrennte Trenntext-Anweisungen folgen. In der folgenden Tabelle sind alle erlaubten Trenntext-Anweisungen und ihre jeweilige Wirkung beschrieben :

Anweisung Beschreibung Beispiel
"Text"

Text an den Trenntext anfügen. Die Anführungszeichen sind Teil der Definition!

"/r"

pStyle "pStyleName"

Absatz/Zeichenstil über den Platzhaltertext setzen. Bei pStyle1 wird dabei nur der erste Absatz im Platzhaltertext gesetzt.

Ist der Stil im Dokument nicht definiert, wird in den globalen Variablen der Einstellungen nach einer Variable dieses Namens gesucht und der Wert dieser Variable als Stilname verwendet.

Die Angabe erwartet den Namen einer Stildefinition, keinen TaggedText. Sonderzeichen im Stilnamen dürfen hier also nicht maskiert werden!

Die Anführungszeichen sind Teil der Definition!

pStyle "ItemList"

pStyle1 "pStyleName"

pStyle1 "Produkt:Motörhead"

cStyle "cStyleName"

cStyle "Rot"

Script ID

Ausfühfren der Action mit der genannten ID.

In gPlaceholderID des Skriptes steht dabei die ID des Platzhalters. Die Skripte haben die ClassID 50.

Script 12345

Füge vor den Platzhalter einen Absatztrenner ein und formatiere den gesamten Platzhalter mit dem Absatzstil ItemList. Ist dieser Stil nicht definiert, wird in den globalen Variablen nach einer Variable gleichen Namens gesucht. Wird die gefunden, gibt der Wert der Variablen Itemlist den Namen des gewünschten Stiles an

# "/r" pStyle "ItemList"

Mit Hilfe der -Buttons können Sie die einzelnen Anweisungen erstellen. Der Dialog fügt die erzeugte Anweisung immer an die bestehende Anweisungsfolge an und sieht so aus:

Es kann immer nur eine Anweisung angefügt werden. Angefügt wird der erste Teil (Absatzstil, Zeichenstil, Skript) des Dialoges, der einen Wert enthält.

[Ab v4.3 R36180] Die Funktion berechnet den einzusetzenden Trenntext und schreibt ihn in die globalen Variable gNewValue. Die Skripte werden wie üblich in den actions angelegt und bekommen die ClassID 50.

Mit folgender Angabe im Trenntext wird die Skriptausführung aktiviert. Für actionID setzen Sie die ID der Aktion ein:

# Script actionID

Folgende globale Variablen sind zusätzlich zu den Standardvariablen wie gFrame, gStart, gLen in den Skripten der Klasse 50 definiert:

Name Datentyp Beschreibung
gNewValue cScript : char* mit max. Länge 2GB

Python : String
Neuer Trenntext. Der Trenntext darf auch %!TT-Text sein.
gDelimiterType int

Typ des Trenntextes:

  • (1) kPrefix
  • (2) kPrefixIfEmpty
  • (4) kPostFix
  • (8) kPostFixIfEmpty

    Diese Schlüsselworte benötigen den Include:

    #include "internal/text.h"
  • gPlaceholderID int

    ID des Platzhalters

    gPlaceholderType int

    Typ des Platzhalters

  • 1 : Textplatzhalter
  • 8 : Tabellenplatzhalter
  • Hier ein Beispielskript:

    #pragma plain
    
    #include "internal/text.h"
    
    int main ()
    {
    	if (gDelimiterType == kPrefix)
        	// Growing ABC
        	strcpy (gNewValue, "%!TT<cSize:4>A<cSize:><cSize:6>B<cSize:><cSize:8>C");
    	else if (gDelimiterType == kPrefixIfEmpty)
        	// Shrinking ABC
    		strcpy (gNewValue, "%!TT<cSize:8>A<cSize:><cSize:6>B<cSize:><cSize:4>C");
    	else if (gDelimiterType == kPostfix)
    		// Shrinking CBA
    		strcpy (gNewValue, "%!TT<cSize:8>C<cSize:><cSize:6>B<cSize:><cSize:4>A");
    	else if (gDelimiterType == kPostfixIfEmpty)
    		// Growing CBA
    		strcpy (gNewValue, "%!TT<cSize:4>C<cSize:><cSize:6>B<cSize:><cSize:8>A");
    	
    	return 0;
    }

    Hier die Ergebnisse im Dokument, wenn alle Trenntexte eines Platzhalters dieses Skript verwenden:

    Um Trenntexte über cScript zu setzen verwenden Sie den Skript-Befehl placeholder::change_tags mit den folgenden info-Werten

    In w2-Tags von TaggedText verwenden Sie die Schlüsselworte

    Mehr dazu hier.

    Der Standardweg zur Verwendung von Trenntexten sollte über die Definition im Datenpool gehen. Sie müssen dazu die Tabelle/Datei placeholder um die folgenden String-Felder erweitern.

    Shortcut Datentyp
    prefix char*
    prefixifempty

    postfix

    postfixifempty

    Die Werte der Felder werden wie im Abschnitt Format beschrieben definiert.

    Das Hinzufügen von Attributen in eine XML-Datei können Sie mit einem beliebigen Texteditor, der unformatierten Text bearbeiten kann, machen. Lassen Sie einfach ein geeignetes Ende-Tag ersetzen durch durch dieses Ende-Tag+Zeilentrenner+Neues Tag - und das für die gesamte Datei.

    Einfügen der neuen Elemente in placeholder.xml durch Suchen/Ersetzen von Text. Wenn das Element active nicht vorhanden ist, nehmen Sie einfach irgendein anderes Element der ersten Ebene.

    Suche      </active>
    Ersetze    </active>
               <prefix></prefix>
               <postfix></postfix>
               <prefixifempty></prefixifempty>
               <postfixifempty></postfixifempty>

    Die Anweisungen zum Hinzufügen von Tabellenattributen können von Datenbanktyp zu Datenbanktyp unterschiedlich sein. Stellvertretend hier die Anweisung für mySQL (die aber fast überall funktioniert).

    alter table placeholder
        add prefix text,
        add postfix text,
        add prefixifempty text,
        add postfixifempty text;
    update placeholder set
        prefix = '',
        postfix = '',
        prefixifempty = '',
        postfixifempty = '';
    commit;

    [ab v4.0.5 R14200] Mitunter ist es erwünscht, dass sich ein Platzhalter beim Einsetzen eines Produktes nicht ändert und in allen Anwendungen den gleichen Inhalt anzeigt. Dazu kann der Platzhalter (Text oder Rahmen) in der Palette als Feste-Produktverknüpfung markiert werden:

    Die Platzhalter werden im Dokument mit einem rot hinterlegten Kreis am Platzhalteranfang dargestellt:

    Die Verknüpfung dieser Platzhalter kann nur auf drei Arten geändert werden:

    Mit dem cScript-Aufruf placeholder::change_tags und dem Slot "StaticLink" kann eine feste Produktverknüpfung gelöst (bzw. wieder gesetzt) werden.

    In sehr seltenen Fällen erscheinen zusätzlich zu den farbigen Platzhaltern merkwürdige rote Punkte in den Dokumenttexten:

    Diese Punkte sind keine Fehler im Dokumenttext oder in den priint:comet Plugins. Sie entstehen bei gravierenden und unerwarteten Fehlern, wie sie während der Konfiguration eines Projektes immer wieder vorkommen können. Solche Fehler sind natürlich normal, die Frage ist nur: Woher kommen diese Punkte und wie kann man sie wieder entfernen, ohne den gesamten Text zu löschen?

    Die Punkte (und die orangen Striche) markieren eine besondere Art von Platzhaltern:, die beim Einfügen von Inlines mit TaggedText aus den <w2inlines> des Importes erzeugt werden. Nach dem eigentlichen Import des TaggedTextes werden aus diesen Platzhalter sofort die entsprechenden Inlines generiert. Dieser zweistufige Import ist nötig, damit die Inlines an den richtigen Textpositionen eingefügt werden können. Bringt man InDesign® aber beim Anlegen der Inlines zum Abbruch oder gar Absturz, dann bleibt der w2inline-Platzhalter zwar im Dokument wird aber natürlich nicht mehr ersetzt.

    [ab v4.1.8 R29480] Mit dem Fly-Out-Menu Rote Punkte aus ~ entfernen der Palette Platzhalterwerte können die roten Punkte entfernt werden. Bei aktiver und nicht leerer Textauswahl werden die roten Punkte aus den Platzhaltern der Textauswahl entfernt. Ist die Textauswahl nicht aktiv, werden die roten Punkt raus dem gesamten Dokument entfernt.