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 :
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 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 |
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:
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 :
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 | '' |