Seitentemplates und ihre Elemente werden zur Steuerung des Produktaufbaus (Info-Objekte) verwendet. Sie können jedes beliebige InDesign®-Dokument zu einem Seitentemplate mache. Wählen Sie dazu das Menü

Dokument als Seitentemplate verwenden

der Paletten Seitentemplates oder Seitenelemente. Das Dokument wird dann sofort zu einem Seitentemplate gemacht. Wählen Sie das Menü erneut, wird die Einstellung rückgängig gemacht. Alle Einstellungen sowohl des "normalen Dokumentes" als auch des Seitentemplates und seiner Elemente bleiben erhalten (siehe auch hier).

Das Plug-In PageTemplates stellt zwei Paletten zur Verfügung :

  1. Seitentemplates - die Liste der Seitentemplates eines Datenpools
  2. Seitenelemente - die Einstellungen des Seitentemplates und seiner Elemente.

Die Palette stellt die im aktuellen Datenpool abgelegten Seitentemplates in einer Liste dar. Mit den oberen zwei Eingabefeldern Feldern können Sie die Suche nach den Einträgen verfeinern. Die Suche ist case insensitive.

Mit dem Löschen-Button können die ausgewählten Einträge gelöscht werden. Zum Löschen muss die Alt-Taste gehalten werden. Die ausgewählten Einträge werden aus der Liste der Seitentemplates im Datenpool gelöscht.

[Ab Version 3.1, R1956, 17. Juni 2010] Vor dem Löschen eines Templates mit kann im Datenpool nachgefragt werden, ob es erlaubt ist, dieses Template zu löschen. Die dazu notwendige Anweisung hinterlegen Sie im

Panelstatement 120

Die Anweisung darf ein Datenbankbefehl (unter SOAP auch eine SOAP-Anweisung) oder ein cScript sein.

Selects und SOAP-Anweisungen enthalten ein Fragezeichen (?), das durch die ID des Templates ersetzt wird. Es wird genau eine String-Ergebnisspalte erwartet, siehe hier.

Die folgende Anweisung verbietet das Löschen aller Templates.

select "beep" from pagetemplates where id = ?

Die Prüfung, ob ein Template gelöscht werden darf, ist häufig sehr komplex. Sie können deshalb auch cScript verwenden, um Ihre Prüfungen umfangreicher zu gestalten. In allen Fällen müssen Sie aber die in diesen Skripten definierte Ausgabevariable gResult (vom Typ char[5000]) auf einen der unten beschriebenen Werte setzen, wenn das Löschen des Templates unterbunden werden soll. Folgende globale Variablen sind im Skript definiert:

Variable Typ Beschreibung
gRecordID int ID des Templates
gRecordStringID char* Name des Templates, !readonly!
gResult char[5000] - Rückgabewert Die Bedeutung der Werte entnehmen Sie der Tabelle Ergebnisstring

Das Skript verbietet das Löschen ungeradzahliger Templates.

int main ()
{
	if (gRecordID % 2)
	{
	 	sprintf (gResult,
			"Ungeradzahlige Templates (%d) können nicht gelöscht werden.",
			gRecordID);
			
	return 0;
}
Ergebnis-String Beschreibung
Leer oder NULL oder kein Ergebnis gefunden Das Template darf gelöscht werden
"beep" Template darf nicht gelöscht werden Auf den Löschversuch wird mit einem Piep reagiert.
"no_message" Der Löschversuch wird ignoriert
sonst Die Nachricht wird in einem Warndialog gezeigt.

Previews und die Sicherungskopie der Originaldatei werden unter XML und SOAP nicht aus dem Datenpool entfernt. Sie werden aber überschrieben, sobald die ID des Eintrages wieder verwendet wird.

[seit v3.4 R5942] Jedes Seitentemplate kann mit einem Skript verknüpft werden. Im oberen Teil der Palette Seitenelemente befindet sich dazu das Popup-Menü Seitenskript:

Wählen Sie hier eins der angebotenen Skripte aus. Dieses Skript wird dann jedesmal ausgeführt, wenn eine Dokumentseite mit diesem Seitentemplate versehen wird. Der Aufruf erfolgt sowohl bei manuellen Verknüpfungen als auch beim Produktaufbau, Reorganisationen und bei Aufrufen des Skriptbefehles page::set_info mit dem Info-String "id".

In dem Skript können z.B. zusätzliche Rahmen oder Seitenüberschriften angelegt oder aktualisiert werden.

Skripte, die beim Setzen von Seitentemplates ausgeführt werden sollen, werden wie üblich in den Actions definiert und haben dort die ClassID 54. Das Popup-Menü Seitenskript wird automatisch mit allen so definierten Einträgen des aktuellen Datenpools gefüllt.

Achtung I: Wenn das Skript Rahmen anlegt und diese Rahmen Produktrahmen schneiden, wird dadurch der Produktaufbau gestört - weil der Produktuafbau ja nur an leeren Stellen aufbaut. Um das zu vermeiden, sollten diese Skripte Rahmen immer auf einer eigenen Ebene anlegen und diese Ebene im Produktaufbau als Gestaltungsebene angeben.

Achtung II: Um mehrfaches Anlegen von Rahmen durch das Skript zu vermeiden, sollten Rahmen, die hier angelegt werden, geeignet markiert werden. Im Beispiel unten wird dafür die Funktion frame::set_script_tag verwendet. Sie können das aber natürlich auch anders lösen.

Variable Typ Beschreibung
gRecordID int

Ist gProduct leer, wird die ID des ersten Produktes der aktuellen Seite ermittlet. Dazu werden die bestehenden Seiteninhalte gesammelt und nach Seitenelementen sortiert. Die erste gefundene Produkt-ID wird verwendet.

Ist gProduct nicht leer, enthalten die Variablen die ID dieses Produktes. gRecordStringID darf nicht verändert werden!

gRecordID2
gRecordID2
gRecordStringID char*
gProducts ProductList

Aktuelle vollständige Liste der aufzubauenden Produkte inkl. aller Seitentemplates und das aktuelle Produkt.

Liste und Produkt dürfen nicht gelöscht werden! Änderungen an der Liste oder dem Produkt haben direkten Einfuß auf den Produktaufbau! Änderungen an der Listenposition z.B. durch productlist::first werden ab v4.1 R22201 nach Skriptende wieder zurückgesetzt. In Versionen davor muß eine geänderte Listenposition mit

    productlist::get_pos (gProducts, gProduct, 1);

oder anderen geeigneten Anweiungen wieder zurückgesetzt werden.

Nur in Aufrufen den Produktaufbaus (gScriptType = 2 oder 3) definiert.

gProduct Product
gScriptType int

1 : Seitentemplate wird manuell oder über page::set_info gesetzt
2 : Seitenaufbau
3 : Seitenaufbau Fortsetzung eines Produktes
6 : Aufruf von app.comet.setTemplateID
7 : Einfügen in bestehendes 1:N-Seitenelement
8 : Reorganisation

gPage int

Aktuelle Seitennummer, 1-basiert

Das Skript sucht zuerst nach Rahmen, die durch vorangegangene Aufrufe selbst angelegt wurden, Hier werden dazu die Funktionen frame::set/get_script_tag verwendet. Alle auf der Seite bereits angelegte Rahmen werden gelöscht. Dann wird ein normales Template eingefügt und geladen. Die neuen Rahmen werden anschließend wieder entsprechend markiert. Mehr ist nicht zu machen.

#include "internal/types.h"
			
char		stKey []		= "Comet_Pagetemplate";
char		stLayer []		= "Seitenhintergrund";
int			stTemplateUD	= 62;
float		stX				= 36.0;
float		stY				= 36.0;

int main ()
{
	ItemList	pl			= itemlist::pageframes (gPage);
	ItemRef		fr			= item::alloc ();
	int			i;

	// Lösche alle Rahmen, die dieses Skript mgl. in 
	// vorangeganngen Aufrufen auf dieser Seite 
	// angelegt hat. 	
	for (i=0; i< itemlist::length (pl); i++)
	{
		itemlist::get (pl, fr, i);
		if (strcmp (frame::get_script_tag (fr, stKey), "YES") == 0)
		{
			frame::remove (fr);
		}
	}
	itemlist::release (pl);
	
	// Füge auf einer eigenen Ebene ein Template ein. 
	layer::add_i (stLayer, 0);
	pl = document::place_items (0, "", "", 
				stTemplateUD, 
				stX, stY,
				gPage, stLayer,
				gRecordID, gRecordID2, gRecordID3, gRecordStringID,
				1, 3); 	// auto load all place holders of class 3
	
	// Markiere alle Rahmen so, dass sie bei einem erneuten
	// Aufruf gefunden und wieder gelöscht werden können.
	for (i=0; i< itemlist::length (pl); i++)
	{
		itemlist::get (pl, fr, i);
		frame::set_script_tag (fr, "YES", stKey);
	}
	
	itemlist::release (pl);
	
	return 0;
}

Die Palette Seitenelementes zeigt die Seitenelemente (Rahmen) der aktuellen Dokumentseite in InDesign®. Sie zeigt nicht die im Datenpool hinterlegten Daten eines Seitentemplates.

    

Im oberen Teil der Palette sehen Sie die Einstellungen der aktuell in InDesign® gezeigten Seite und die Previews für linke/rechte Seiten und für linke/rechte Folgeseiten. Das Preview des Seitentemplates selbst ist mit einem grauen Rahmen hervorgehoben.

Dokumentseiten, die mit einem Seitentemplate verknüpft sind, zeigen diese Informationen ebenfalls im Seitenhintergrund. Wählen Sie dazu das Kontextmenü

    Kontextmenü > Seitentemplates einblenden

    

Unter den Einstellungen für die Seite sehen Sie die Liste aller Elemente der Seite. Auch diese Liste zeigt die Situation im InDesign®-Dokument und nicht die des Datenpools! Die Liste wird im Normalfall bei Bedarf automatisch neu geladen. Mit können Sie die Liste auch direkt neu laden lassen.

In der Liste können mehrere Einträge gleichzeitig ausgewählt werden. Die Auswahl zeigt immer die im Dokument ausgewählten Rahmen. Durch Auswahl von Listeneinträgen wählen Sie den entsprechenden Rahmen im Dokument aus. Das kleine Bild der zweiten Spalte der Liste dient als Hilfe zum Finden des Rahmens auf der Seite:

Die Liste ist sortiert nach der Reihenfolge der Elemente. Die Elemente können mit den Buttons und umgeordnet werden.

Im unteren Bereich der Palette werden die Eigenschaften des ersten ausgewählten Eintrages der Elementliste angezeigt. Änderungen von Werten beziehen sich immer auf alle ausgewählten Einträge der Liste. Die Änderungen werden sofort im Dokument angezeigt.

In den priint:comet Plugins werden die Elemente ausschließlich über ihre Sequenznummer (die sich aus der Reihenfolge in der Liste ergibt) verwendet. Die Namen der Elemente sind hier ohne Bedeutung. Einige Anwendungen im PubServer adressieren die Elemente aber über ihren Namen (der in diesem Fall aber ebenfalls aus der Sequenznummer besteht). Um die Sequenznummer in den Namen zu übernehmen, gehen Sie wie folgt vor:

  1. Wählen Sie alle Elemente in der Liste aus.
  2. Tragen Sie in das Namensfeld das Schlüsselwort $seq (oder einen beliebigen Text, der diesen Schlüssel enthält) ein.
  3. Wenn Sie das Namensfeld (z.B. mit TAB) verlassen, werden alle Elemente entsprechnd umbenannt. $seq wird dabei automatisch durch die entsprechende Sequenznummer ersetzt.

Ist die Option Stellplatzgröße prüfen aktiviert, muss das eingefügte Produkt vollständig in das Seitenelement passen.

Ist die Option abgewählt, muss das Produkt lediglich auf die aktuelle Seite passen. Als Seitengröße wird der Anschnitt (bleed) der Seite verwendet. Mit der Option Begrenzt durch Seitenränder kann die verwendete Seitengröße ab v4.1 R22300 auf die Seitenränder (margins) beschränkt werden.

Mit der Umstellung eines Dokumentes zu einem Seitentemplate werden alle Rahmen des Dokumentes als Seitenelemente dargestellt :

         

Im oberen Teil der Seitentemplates wird die Fläche, die der Rahmen belegt, angezeigt. Als Einheit wird der in der X-Achse eingestellte Wert verwendet. Die beiden folgenden Werte geben an, wieviel Prozent der aktuellen Seite bzw. aller Rahmen der Seite der Rahmen gerade belegt. Überdeckungen und Mehrfachüberdeckungen werden dabei beachtet. Die Werte werden nach Grössenänderung von Rahmen der selben Seite aktualisiert.

Die Flächenberechnungen werden von den rechteckigen Grundflächen der Rahmen gemacht. Bei verzerrten Rahmen, Polygonen, Kreisen, ... wird das die Figur umschließende Rechteck als Grundlage der Berechnung verwendet.

Für die Palette sind keine Panelstatements oder Actions nötig.

Unter XML können Sie ohne irgendwelche Installationen (ausser natürlich, dass sich das Plugin PageTemplates in Ihrem Comet-Ordner befinden muss.) sofort mit der Arbeit beginnen. Alle Dateien und Unterordner werden automatisch angelegt.

Beim Sichern von Seitentemplate-Dateien wird, wenn noch nicht vorhanden, automatisch die Datei pagetemplates.xml in Ihrem Datenordner angelegt. Zur Ablage von Previews und Sicherungskopien werden ausserdem die Ordner pagetemplates/data und pagetemplates/previews angelegt.

Unter SOAP müssen Sie die Datei im SOAP-Service unter der FileID pagetemplates.xml einbuchen. Dazu gehen Sie am besten wie folgt vor :

  1. Verwenden Sie einen beliebigen XML-Datenpool.
  2. Erzeugen Sie ein Seitentemplate. Dabei wird die Datei pagetemplates.xml im Datenpool angelegt.
  3. Löschen Sie das Seitentemplate aus Punkt 2 wieder.
  4. Jetzt können Sie die Datei im SOAP-Service einbuchen. Das Einbuchen kann bei jedem Service unterschiedlich sein. Sie müssen auf jeden Fall Ihren Systemverantwortlichen zu rate ziehen.

Bei einer Verbindung zu einer Datenbank müssen Sie auf der Zieldatenbank die Tabelle pagetemplates anlegen. Sie sollte einen Eintrag mit der ID 0 enthalten.

Feld Typ Null Standard Bemerkungen
ID int Nein 0 Unique Index
OwnerID int Ja 0 Dokumenten können meherere PageTemplates enthalten. Es wird immer nur das Dokument der ersten gesichert.
PageWidth float Ja NULL in Punkten
PageHeight float Ja NULL
PageNum int Ja 0 1-basiert
MarginLeft float Ja NULL in Punkten
MarginTop float Ja NULL
MarginRight float Ja NULL
MarginBottom float Ja NULL
Active int Ja NULL 0 | 1
Name varchar (512) Ja NULL
PageType int Ja 0 0 : beliebig
1 : links
2 : rechts
Barrier int Ja NULL 0 : Off
1: Linke Seite
2 : Rechte Seite
3 : Neue Seite
OpositeID int Ja NULL ID der gegenüberliegenden Seite, siehe auch AutoOposite
SuccessorID int Ja NULL ID der nachfolgenden Seite, siehe auch AutoSuccessor
Masterpages varchar (4000) Ja NULL Komma-gretrennte Liste der Musterseiten, die angewendet werden dürfen
AutoOposite int Ja NULL 0 | 1, Gegenüber selbständig festlegen (nächste Dokumentseite)
AutoSuccesor int Ja NULL 0 | 1, Nachfolger selbständig festlegen (nächste Dokumentseite)
Templates clob, longtext Ja NULL XML-Text der Seitentemplates
Preview blob, longblob Ja NULL
Data blob, longblob Ja NULL
DocName varchar (512) Ja ''