Die Palette wird verwendet, um Text- und Bildalternativen für Platzhalter und Produkte zu zeigen. Hier ein Screenshot:
Mit Hilfe der Buttons der ersten Spalte können Platzhalterinhalte neu gesetzt werden. Dabei werden nicht, wie sonst üblich, die Platzhalter mit einem neuen Objekt verknüpft und dann neu geladen, sondern die Inhalte werden direkt ins Dokument geschrieben. Darüber hinaus können Sie Elemente mit Drag and Drop direkt in Rahmen und Texte ziehen und ablegen. Weitere Informationen finden Sie in den Tooltips der Palette.
Werden Templates in Texte eingesetzt, werden die Rahmen zuvor gruppiert und dann als ein Inline in den Text eingefügt. Wird beim Einsetzen von Templates in Texte die Alt-Taste gehalten, werden die Rahmen als einzelne Inlines eingefügt. Dabei wird die in der Palette Template-Verhalten festgelegte Reihenfolge verwendet.
Zum Einsetzen von Bildern werden die Einstellungen der Popupmenüs Bildposition und Skalierungverfahren oben rechts in der Palette verwendet. Bei gahaltener Alt-Taste beim werden vor dem Einfügen von Bildern die allgemeinen Importoptionen von InDesign® (Ebenen, Beschneidungspfade, Farbräume, ...) erfragt.
Beachten Sie, dass die so geänderten Platzhalter im Normalfall nicht mehr synchron mit den Inhalten der Datenbasis sind und Änderungen beim Aktualisieren der Platzhalter verloren gehen werden.
Mit kann die Listendarstellung zwischen kleinen und großen Einträgen umgeschaltet werden.
Die Suchmethoden werden in der Datenbanktabelle previewstatements bzw. in der Datei previewstatements.xml definiert und erscheinen in der dort festgelegten Reihenfolge oben links im Suchpopup der Palette. Suchmethoden können nach folgenden Kriterien klassifiziert werden:
Die Klassifizierung der Suchmethode wird im Attribut needsselection der PreviewStatements festgelegt (siehe folgende Tabelle). Für platzhalter- und produktabhängige Suchanweisungen wird vor der Suche Hilfe des Attributs condition (siehe unten) geprüft, ob die Suche überhaupt ausgeführt werden kann. Die dazu nötigen aktuellen Platzhalter- und Produktwerte sind in entsprechenden Suchparametern definiert.
Die Tabelle/Datei previewstatements muss folgende Attribute haben:
Attribut | Typ | Beschreibung |
id | int | Eindeutige ID des Eintrages |
classid | int | Das Feld ist für eventuelle Erweiterungen vorgesehen. Aktuell wird nur die Palette Previews und Alternativen mit unterstützt:
6 |
name | string | Name der Suchmethode im Suchpopup oben links in der Palette. Die angezeigten Namen können sprachabhängi lokalsiert werden. Hier finden Sie Informationen zu den Feld-Beschriftungen.
In das Popup werden nur Einträge aufgenommen, deren objectstatementid > 0 ist. |
sequencenr | int | Festlegung der Reihenfolge der Einträge im Suchpopup. Die Werte geben nicht die Position an, sie werden zu Ermittlung der Reihenfolge verwendet. |
isdefault | int | Die erste Suchmethode mit einem Wert >0 wird nach dem Login im Suchpopup ausgewählt. |
needsselection | int |
Klassifizierung der Anweisung. Der Anweisungstyp wird unter dem Popup mit den verfügbaren Suchen angezeigt.
|
condition | string | Suchbedingung, Die Suche wird nur ausgeführt, wenn die Bedingung erfüllt ist. Bedingungen werden nur in platzhalter- und produktabhängigen Suchen ausgewertet (needsselection = 1|2) |
statement | string | Suchanweisung in der Syntax der Datenverbindung.
In XML-Offline und Datenbankverbidungen liefert die Anweisung die IDs der gefundenen Ergebnisse (ID, ID2, ID2, StringID), siehe hier. Die Inhalte der gefunden Ergebnisse werden danach in einem zweiten, in objectstatementid definierten Aufruf ermittelt. In SOAP- und PubSerververbindungen wird das komplette Ergebnis inkl. ID erwartet, siehe hier. |
objectstatementid | int | In XML-Offline und Datenbankverbidungen liefert die Anweisung statement lediglich die IDs der gefundenen Ergebnisse. Im Attribut objectstatementid geben Sie die ID eines weiteren PreviewStatements an, mit dem danach die Inhalte der einzelnen Ergebisse ermittelt werden.
In SOAP- und PubSerververbindungen setzen Sie den Wert immer auf 0. Einträge mit einem Wert < 0 werden zwar ins Popup aufgenommen, führen aber keine Suche durch und können deshalb als Zeilentrenner im Suchpopup verwendet werden. Setzen Sie dazu gleichzeitig das Attribut name auf den Wert "-". |
hasButtonState [optional] | int | Liefert die Anweisung den Status des Ladenbuttons der Listeneinträge? Mehr dazu siehe hier. |
hasLinkScript [optional] | int | Enthält die Anweisung eine Angabe für die ID des Link-Sriptes? Mehr dazu siehe hier. |
Hier ein Bespiel für eine gültige Definition in XML. Der Eintrag fügt einen Zeilentrenner in das Suchpopup ein. Dazu wird der Name auf "-" gesetzt. Damit der Eintrag überhaupt in das Popup aufgenommen wird, muss auch die objectstatementid gesetzt werden. Da nichts geladen werden soll, hier eine -1.
<previewstatements> <previewstatement> <id>50</id> <name>-</name> <classid>6</classid> <needsselection>0</needsselection> <condition></condition> <statement></statement> <objectstatementid>-1</objectstatementid> <sequencenr>50</sequencenr> <isdefault>0</isdefault> <hasButtonState>0</hasButtonState> <hasLinkScript>0</hasLinkScript> </previewstatement> </previewstatements>
Suchanweisungen für XML und Datenbankverbindungen werden in zwei Schritten ausgeführt :
Suchanweisungen für PubServer und SOAP-Verbindungen werden in einem Schritt ausgeführt, der IDs und anzuzeigende Werte gleichzeitig abgeholt,
Mit zusätzliche Bedingungen kann die Ergebnisliste auf die Angaben der Suchfelder eingeschränkt werden.
Diese Anweisung wird nur bei XML und Datenbankverbindungen ausgeführt. Für SOAP- und PubServer Verbindungen siehe hier. Die Anweisung muss folgende Werte liefern :
Typ | Beschreibung |
int, int, int, string | ID des Eintrages.
Die ID entspricht üblicherweise einer gültigen ID eines Objektes der angegebenen Klasse mit der ein Platzhalter im Dokument neu verknüpft werden kann. Bei Snippets ist es die ID des Templates, das eingesetzt werden soll. Ist nichts anderes angegeben, wird dabei als Datenquelle pageitems.data verwendet. Wollen Sie eine andere Datenquelle verwenden, müssen Sie das im Statement der einzelnen Einträge angeben (siehe hier). |
int | ClassID des Eintrages. In aller Regel tragen Siehier eine 3 (für die Produktrecherche) ein. |
int, int, int, int | Freie Schlüsselwerte. Auf diese Werte kann beim Laden der Einträge mit der Anweisung objectstatementid mit <key1>, .., <key4> zugegriffen werden. |
string | Freier Schlüsselwert. Auf diesen Wert kann beim Laden der Einträge mit der Anweisung objectstatementid mit <stringkey> zugegriffen werden. |
Mit Alt-Click in das Suchpopup können Sie Einträge editieren.
Hier eine gültige XML-Anweisung zum Laden der IDs. Zur besseren Lesbarkeit sind die Anführungzeichen, > und < hier nicht XML-codiert. Wenn Sie den Anweisungstext direkt in eine XML-Datei einsetzen, müssen Sie direse Zeichen also noc h XML-kodieren.
"$FLOWERS" select id, 0, 0, "", <!-- ID --> 3, <!-- class --> 0, 0, 0, 0, <!-- <key1>, ... --> "" <!-- <stringkey> --> node flowers.flower where id > 0
Hier eine gültige SQL-Anweisung zum Laden der IDs. Alle Einträge der Tabelle comet_snippets_2 sollen in der Liste gezeigt werden.
select id, 0, 0, '', 3, 0, 0, 0, 0, '', 1, 1 from comet_snippets_2 where id > 0
[XML und Datenbankverbindungen] Die Listeneinträge werden mit Hilfe der Ergebnisse der ersten Suchanweisung einzeln geladen. Der Befehl muss einen ?-Wert enthalten, der durch die jeweilige id (also die erste Spalte der übergeordneten Suchanweisung) ersetzt wird. Werden weitere Werte der Listen-Ids benötigt, kann das über die üblichen Tags <ID2>, ... gemacht werden, siehe hier. Zusätzlich können die in der Listensuche definierten Werte <key1>, .., <key4> und <stringkey> abgefragt werden
[PubServer- und SOAP-Verbindungen] Die Listeneinträge werden inklusive ihrer IDs in einem Aufruf geladen. Der Aufruf enthält daher keinen '?'-Wert, mit dem die Listen-ID referenziert werden muß.
Der Wert der (gelb markierten) Ergebnisspalte Path bestimmt den Typ des Eintrages:
Bitte beachten Sie, dass die Ergebnisspalten bis auf die letzten beiden Spalten vollständig sein müssen. Fehlende Einträge können mit 0 bzw. "" gefüllt werden.
Name | Typ | Beschreibung | ||
• Nur für SOAP-Verbindungen | ||||
ID | int | ID des Preview-Eintrages bestehend aus ID, ID2, ID3 und StringID | ||
ID2 | int | |||
ID3 | int | |||
StringID | string | |||
• Angaben zum Bildeintrag | ||||
ImageName | string | Name des Eintrages
Nur für Bildeinträge mit URL : Ist die Angabe leer und die URL endet mit der ////-getrennten Angabe eines Web-Bildnamens, dann wird der Web-Bildname als Name verwendet. |
||
Path | string | Nicht-leere Angaben erzeugen einen Bild -, bzw. einen Snippet- Eintrag. Folgende Angaben werden unterstützt:
Achtung : Trotz aller Bemühungen kann es vorkommen, dass URLs nicht aufgelöst werden können. Nicht auflösbare URLs sind nicht Teil des WERK II Supportes! Wenden Sie sich in diesen Fällen gerne an unseren Support, aber bitte haben Sie Verständnis dafür, dass wir Erweiterungen in diesem Bereich als (kostenpfilchtige) Feature-Requests behandeln.
Leer : |
||
Format | string | Bildformat oder "" | Fehlende Angaben versuchen wir, direkt aus den Bilddaten zu lesen. Bitte haben Sie Verständnis dafür, dass wir hier nur die gängigen Bildformate wie JPEG, PNG, GIF usw. unterstützen können. | |
Bildbreite | int | Angabe in Pixel oder 0 | 1 | ||
Bildhöhe | int | Angabe in Pixel oder 0 | 1 | ||
Auflösung | int | Angabe dpi oder 0 | ||
Farbtiefe | int | Angabe in Bits pro Pixel oder 0 | ||
ButtonState | int |
[Optional]
Status des Laden-Buttons.
Ist für die Anweisung das Attribut hasButtonState = 1 gesetzt, wird hier der Buttonstatus erwartet :
Ist hasButtonState nicht definiert oder 0, sind die Buttons sichtbar und aktiviert. |
||
LinkScript | int | [Optional] Aktion, die nach dem Einsetzen ausgeführt werden soll. Ist für die Anweisung das Attribut hasLinkScript = 1 gesetzt, enthält die Angabe die ID der Aktion, die nach dem Einsetzen des Datensatzes ins Dokument für den Zielrahmen/text ausgeführt werden soll. | ||
• Angaben zum Texteintrag oder Snippet. Die Spalten sind auch für Bildeinträge obligatorisch! | ||||
Texteintrag (Path == "") | Snippet (Path == "snippet@...") | Bild | ||
TextName | string | Textname | Zweite Zeile der zweiten Textspalte.
Aus Gründen Rückwärtskompatibilität ist die Reihenfolge der Felder hier leider etwas unübersichtlich. |
ignoriert |
TextInfo1 | string | Textbeschreibung | Dritte Zeile der zweiten Textspalte | ignoriert |
TextInfo2 | string | ignoriert | Erste Zeile der zweiten Textspalte | ignoriert |
Content | string | Textinhalt. Die Angabe darf TaggedText enthalten. Für die Paletten-Anzeige werden die Tags ausgefiltert und nur der reine Text gezeigt. | Snippetbeschreibung, zweite Zeile der ersten Textspalte | Bildpositionierung, siehe hier. |
SnippetTable | string [optional] | ignoriert | Snippet aus einer eigenen Quelle laden : Name und Attribut der Tabelle, aus der ein Snippet geladen werden soll (z.B. "comet_snippets_2", "data"). Fehlen die Angaben, werden Snippets aus pageitems.data geladen. Siehe unter Eigene Datenquellen. | ignoriert |
SnippetAttr | string [optional] | ignoriert | ignoriert |
Für Bilder können in der Ergebnisspalte Content Hinweise über die Positionierung, den Freistellpfad, etc. angegeben werden. Die Angaben entsprechen den Informationen, die auch in Bildplatzhaltern gegeben werden mit dem einzigen Unterschied, dass Freistellpfade immer über ihren Index und nicht über ihren Namen identifiziert werden müssen. Die Angaben müssen in folgendem Format (und ohne Kommas getrennt) gemacht werden :
Typ | Beschreibung | Default |
int | Bildposition | 5 |
double | Bildgrösse | 0.0 |
int | Index des Freistellpfades (siehe frame::image) | -2 |
int | Freistellparameter | 4 |
int | Clip to frame | 0 |
double | Tolerance | 0.0 |
double | Minimale Pfadgrösse | 0.0 |
double | Inset | 0.0 |
int | Index des Alphakanales (siehe frame::image) | -2 |
String | Name des Alphakanales (siehe frame::image) | "" |
Werden nur Defaultwerte verwendet, dürfen die Angaben auch fehlen. Gültige Positionierungsinfo wären also:
Die hier beschriebenen Snippets sind unterschiedlich zu den mit Comet 4.0.5 eingeführten Comet-Snippets. Eine Beschreibung der Comet-Snippets finden Sie hier.
Hier einige Beispiele für Snippet-Defintionen:
Datenpool | Beispiel | Beschreibung |
XML | snippet@ | Verwende den Eintrag aus pageitems.xml mit der ID der Zeile |
snippet@'pageitems.xml' select preview.src node pageitems.pageitem where id = <ID> | Lade den Dateipfad | |
SQL | snippet@ | Dateiblob mit Zeilenid aus pageitems verwenden |
snippet@select preview from pageitems where id = <ID> | Dateiblob verwenden | |
SOAP | snippet@ | Verwende den Eintrag aus pageitems.xml mit der ID der Zeile |
snippet@pageitems/preview/<ID>.gif | Verwende eine FileID. Die Datei wird mit getBinaryFile geladen. Achten Sie darauf, bei der Verwendung von call oder anderen SOAP-Anweisungen vor der Anweisung einen Leerstring ('') anzugeben. | |
snippet@'pageitems.xml' select preview.src node pageitems.pageitem where id = <ID> | ||
snippet@'' call ... |
Die beiden letzen Spalten SnippetTable und SnippetAttr der Anweisungen zum Laden der Preview-Einträge sind optional und werden nur bei Snippet-Einträgen ausgewertet. Sie enthalten in diesem Fall die Beschreibung, wo nach den Snippets gesucht werden soll. Fehlen die Angaben, werden automatisch "pageitems" und "data" verwendet.
Die Spalten geben den Unterordner im XML-Datenordner an, in dem sich die Snippets befinden. In diesem Unterordner befinden sich Snippets als Dateien unter ihrer ID. Folgende Formate werden unterstützt : INDD, INDS, IDMS.
Das Format kann im zweiten Unterordners als Zahl und durch Komma getrennt mitgegeben werden (1 INDD, 2 INDS, 3 IDMS). Fehlt die Formatangabe, werden INDDs erwartet.
"snippets", "data" lädt für die Snippet-ID 4 die Datei:
xml-ordner/snippets/data/4.indd
Snippets im InDesign®-Snippet-Format IDMS : "snippets", "data, 3" lädt für die Snippet-ID 4 die Datei:
xml-ordner/snippets/data/4.idms
Die Spalten geben Tabelle und Attribut (in dieser Reihenfolge) an, an der die Snippets abgelegt sind. Die Tabelle muss zudem das int-Attribut format haben. Dieses Attribut definiert das Format der Daten im BLOB (1 INDD, 2 INDS, 3 IDMS).
"snippets", "data" führt folgende Anweisung zum Laden des Snippets aus:
select data, format from snippets where id = 4;
Die ID des Snippets plus eine Dateiendung werden als SOAP-ID verwendet. Die beiden Spalten werden dieser SOAP-ID vorangestellt. Auch hier darf, wie bei XML, im zweiten Paramenter eine kommagetrennte Formatangabe gemacht werden (1 INDD, 2 INDS, 3 IDMS). Die Formatangabe wird nicht Teil der SOAP-ID.
"snippets", "data" lädt für die Snippet-ID 4 das Objekt
snippets/data/4.indd
"snippets", "data, 3" lädt für die Snippet-ID 4 das Objekt
snippets/data/4.idms
Hier für jeden Preview-Typ ein statement-Beispiel für XML-Offline. In allen drei Beipielen sind die Spalten ButtonState und LinkScript nicht enthalten, in der Defintion der Anweisungen in PreviewStatements müssen also die Attribute hasButtonState und hasLinkScript beide auf den Wert 0 gesetzt werden!
Zur besseren Lesbarkeit sind die Anführungzeichen hier nicht XML-codiert. Wenn Sie den Anweisungstext direkt in eine XML-Datei einsetzen, müssen Sie diese Zeichen also noch XML-konform kodieren.
"pageitems.xml"
select
"Image Name",
"$DESKTOP/Bilder/orange.jpg",
"Image Format",
400, 300, 360, 8,
<!-- Omit ButtonState and LinkScript -->
"",
"",
"",
""
node pageitems.pageitem where id = ?
Setzen Sie in den Spalten Format und ImageInfo1-4 leere Angaben ein, werden die entsprechenden Bildinformationen intern automatisch berechnet:
"pageitems.xml"
select
"Image Name",
"$DESKTOP/Bilder/orange.jpg",
"",
0 0 0 0,
<!-- Omit ButtonState and LinkScript -->
"",
"",
"",
""
node pageitems.pageitem where id = ?
"pageitems.xml"
select
"Image Name",
"snippet@",
"",
0, 0, 0, 0,
<!-- Omit ButtonState and LinkScript -->
"",
"Column 1",
"Column 2",
"Text Content"
node pageitems.pageitem where id = ?
"pageitems.xml"
select
"Text Name",
"",
"",
0, 0, 0, 0,
<!-- Omit ButtonState and LinkScript -->
"",
"Column 1",
"",
"%!TT<cSsize:24.0>Text Content"
node pageitems.pageitem where id = ?
Der Status des Laden-Buttons in den einzelnen Zeilen der Liste kann beim Laden der Listeneinträge definiert werden. Folgende Einstellungen sind möglich :
Ist nichts anderes angegeben, sind die Buttons sichtbar und aktiv. So schränken Sie die Verfügbarkeit der Buttons ein :
[Ab Version 3.1 R 1730, 5. Feb. 2010] Listeneinträge können auch mit Hilfe eines Skriptes geladen werden. In diesem Fall enthält das Attribut statement zum Laden einfach ein Skript.
Für Skripteinträge sind keine weiteren Previewstatements zum Füllen der einzelnen Listeneinträge nötig. Sie füllen die Listeneinträge direkt im Skript. Damit der Eintrag im Suchpopup erscheint, muss objectstatementid auf einen Wert ungleich 0 gesetzt werden.
Die folgende Tabelle gibt die in diesen Skripten definierten globalen Variablen an:Name | Typ | Beschreibung |
gProducts | IDTypeList | Ergebnisliste der Previews, die gezeigt werden sollen |
gButtonState | int* | Status des Ladenbuttons des Previews (ab Comet 3.1 R2178, 22. Okt. 2010)
Achtung : Setzen Sie *gButtonState = -1, muss der Wert kPreviewButtonState in jedem Produkt definiert werden. Umgekehrt gilt : Wollen Sie die Werte in jedem Produkt einzeln setzen, müssen Sie in Ihr Skript die Anweisung *gButtonState = -1; einfügen. |
gLinkScript | int* | ID der Aktion, die nach dem Einsetzen des Eintrages (Text oder Bild) ausgeführt werden soll, siehe hier.
Geben Sie hier einen Wert >= 0 wird er für alle Einträge der Liste gProducts verwendet. Sonst setzen Sie den Wert jeweils mit product::set und dem Slot kPreviewLinkScript. Achtung : Setzen Sie *gLinkScript = -1, muss der Wert kPreviewLinkScript in jedem Produkt definiert werden. Umgekehrt gilt : Wollen Sie die Werte in jedem Produkt einzeln setzen, müssen Sie in Ihr Skript die Anweisung *gLinkScript = -1; einfügen. |
gSearchField1, gSearchField2 | char*, char* | [seit v3.3 R2660, 26. Sept. 2011] Aktuelle Werte der beiden Suchfelder. Im Gegensatz zu PreviewStatements, die eine Select-Anweisung ausführen, werden die Inhalte der Suchfelder hier nicht automatisch durch '%' verlängert. |
Die Einträge, die in der Liste erscheinen sollen, werden in die globale Produktliste gProducts des Skriptes eingefügt. Achten Sie darauf, die einzelenen Einträge mit kGlobalStack zu erzeugen. Alle Angaben in den Einträgen werden wie bei den normalen Listen auch behandelt. Sie legen also z.B. Texteinträge dadurch an, dass Sie die Pfadangabe auf leer ("") setzen. Eine Beschreibung der definerten Werte für Previews finden Sie unter product::set.
Hier ein Beispiel:
#include "internal/types.h" #include "internal/text.h" #include "internal/products.h" int create_preview ( int i1, int i2, int i3, char * s1, char * name, char * path, char * fmt, int w, int h, int res, int depth, char * descr, char * info1, char * info2, char * info3, int clid, int del) { Product p = 0; p = product::alloc (kGlobalStack); product::set (p, kID, i1); product::set (p, kID2, i2); product::set (p, kID3, i3); product::set (p, kStringID, s1); product::set (p, kPreviewName, name); product::set (p, kPreviewPath, path); product::set (p, kPreviewFormat, fmt); product::set (p, kPreviewWidth, w); product::set (p, kPreviewHeight, h); product::set (p, kPreviewResolution, res); product::set (p, kPreviewBitDepth, depth); product::set (p, kPreviewTextName, descr); product::set (p, kPreviewInfo1, info1); product::set (p, kPreviewInfo2, info2); product::set (p, kPreviewText, info3); product::set (p, kPreviewClassID, clid); product::set (p, kPreviewToDelete, del); productlist::append (gProducts, p); return 0; } int main () { Product p; create_preview ( 2, 0, 0, "", "Qualitätsarbeit", "$DESKTOP/12.idml", "", // Format leer! 0, 0, 0, 0, "Bild1", "info-1", "info-2", "info-3", 0, 0); create_preview ( 3, 0, 0, "", "Tantarantana", "$DESKTOP/Bilder/tantarantana.jpg", "JPG", 100, 200, 72, 8, "Bild1", "info-1", "info-2", "info-3", 0, 0); create_preview ( 14, 0, 0, "", "Ein Text", "", "", // Pfad leer! 0, 0, 0, 0, "Textname", "Info1", "info2", "Und das ist der Text : <0x00FC>äöü", 0, 0); create_preview ( 17, 0, 0, "", "Kho Payam", "snippet@", "JPG", 700, 800, 75, 64, "Bild4", "info-10", "info-11", "info-12", 0, 0); return 0; }
Platzhalter- und produktabhängige Suchen fragen vor dem Auslösen der Suche, ob die Suche überhaupt ausgeführt werden soll. Dazu wird die Angabe condition geprüft. Der String muss eine gültige boolsche Bedingung enthalten. Die Bedingung wird lokal geprüft, darf also keine Datenbankanweisungen enthalten.
Hier eine gültige Bedingung. Die Bedingung testet, ob im Dokument ein Platzhalter ausgewählt ist und ob dieser Platzhalter ein Produkt ist. Näheres über die erlaubten Tags erfahren Sie hier.
<selection.placeholder> > 0 and <selection.class> = 3
In den Anweisungen der Suchmethoden kann mit Hilfe üblichen Tags auf globale Werte der Umgebung zugegriffen werden. Beachten Sie aber, dass Sie nur auf Werte zugreifen können, die global definiert sind, also etwa der Wert von <page> undefiniert ist.
Für die platzhalterabhängige Suche (needsselection == 1) sind folgende zusätzliche Werte definiert. Die Tags enthalten jeweils die Werte des ersten gefundenen Platzhalters im Dokument. Die Tags können, soweit nicht anders angegeben, in allen Anweisungen zum Laden der Listen-IDs, Listeneinträge und Testen der Suchbedingung verwendet werden.
Name | Typ | Beschreibung |
<selection.ID> | int | ID des ersten im Dokumentes ausgewählten Platzhalters. |
<selection.ID2> | ||
<selection.ID3> | ||
<selection.stringID> | string | |
<selection.placeholder> | int | Platzhalter-ID des ersten im Dokument ausgewählten Platzhalters |
<selection.class> | int | ClassID des ersten im Dokument ausgewählten Platzhalters |
<selection.text> | string | Text der aktuellen Dokumentauswahl (auf max. 4000 Zeichen gekürzt). Ist die Textauswahl nicht aktiv, ist der String leer. |
<selection.tagtext> | string | |
<selection.tagpath> | string | Bildpfad des aktuell ausgewählten Platzhalterrahmens. Ist kein Platzhalterrahmen ausgewählt oder kein Bild definiert, ist der String leer. |
Nur definiert beim Laden der Listeneinträge (objectstatementid = 0) | ||
<ID> | int | ID, die beim Laden der Listen-IDs ermittelt wurde. |
<ID2> | ||
<ID3> | ||
<StringID> | string | |
<key1> | int | Werte aus der zugehörigen Anweisung zum Laden der Listen-IDs |
<key2> | ||
<key3> | ||
<key4> | ||
<stringkey> | string |
Für die produktabhängige Suche (needsselection == 2) sind folgende zusätzliche Werte definiert. Die Tags enthalten jeweils die Werte des ersten ausgewählten Produktes der Produktrecherche. Die Tags können, soweit nicht anders angegeben, in allen Anweisungen zum Laden der Listen-IDs, Listeneinträge und Testen der Suchbedingung verwendet werden.
Tag | Typ | Beschreibung | ||||
<product.id> | int |
ID des ersten ausgewählten Eintrages der Produktrecherche |
||||
<product.id2> | int | |||||
<product.id3> | int | |||||
<product.stringid> | string | |||||
<product.pageitemid> | int | Mit welchem Tepmplate soll der erste ausgewählte Eintrag der Produktrecherche geladen werden? | ||||
<product.docid> | int | Informationen für den Rasteraufbau von Comet 3.0. Die Angaben werden von Comet 4.0 weiter unterstützt aber nicht mehr verwendet. | ||||
<product.masterpage> | string | |||||
<product.grid> | string | |||||
<product.gridid> | int | |||||
<product.element> | string | |||||
<product.elementid> | int | |||||
<product.needsrequest> | int | |||||
<product.defined> | int | |||||
<product.level> | stringlist::getint | Absolute Schachtlungstiefe im Produktbaum | ||||
<product.substatement> | string | Bei Einträgen mit Unterelementen die Anweisung zum Laden der Unterelemente. Sonst leer. | ||||
<product.classid> | stringlist::getint | Klassen-ID des ersten ausgewählten Eintrages der Produktrecherche | ||||
<product.row1> | stringlist::gettext | Text der ersten/zweiten Textspalte des ersten ausgewählten Eintrages der Produktrecherche | ||||
<product.row2> | stringlist::gettext | |||||
<product.pre_ruleid> | int | ID und Parameter der Regeln zum Vorbereiten und Nachbearbeiten des ersten ausgewählten Eintrages der Produktrecherche. In Comet 4-Anwednungen haben diese Parameter keine Bedeutung mehr. | ||||
<product.pre_ruleparams> | string | |||||
<product.post_ruleid> | int | |||||
<product.post_ruleparams> | string | |||||
<product.adparams> | string | |||||
<product.snippet_attr> | string | Name des Datenbank/XML-Attributes, in dem das Snippet gespeichert wird. | ||||
<product.buttonstate> | int | Siehe oben unter gButtonState | ||||
<product.linkscript> | string>int | Siehe oben unter gLinkScript |
[Ab v4.3 R35700] Alle für die Suchbedingungen definierten Tags können auch direkt in Skripten verwendet werden. Schreiben Sie dazu die Tags direkt und mit den spitzen Klammern in ihren Skripttext. Die Tags werden vor der Ausführung automatisch durch ihre Werte ersetzt.
Im Besipiel wird <product.id> vor der Ausführung automatisch durch die ID des ersten ausgewählten Produktes (oder 0) ersetzt.
if (<product.id> == 120)
{
...
}
Die automatische Ersetzung der Tags geht natürlich nicht, wenn Sie den Text eines Tags, z.B. <product.id>, auch in einer anderen Bedeutung, z.B. als Textausgabe verwenden!
In Versionen vor v4.3 R35700 sind diese Tags in Skripten nicht definiert. Sie können die entsprechenden Informationen aber leicht mit Hilfe entsprechender cScript/Python-Funktionen ermitteln. Platzhalter-relevante Infos etwa erhalten Sie mit Hilfe der Funktionen textmodel::selection und placeholder::(s)get_value.
Ermittle die Produkt-ID plid des ersten ausgewählten Platzhalters im Dokument.
ItemRef frame = item::alloc (); ItemList frames = itemlist::alloc (); int s, e; int plid = 0; char sid [5000]; textmodel::selection (&s, &e, frame, frames); if (s < 0) frame = itemlist::get (frames, frame, 0); plid = placeholder::get_value (frame, "ID", s); item::release (frame); itemlist::release (frames);
Produkt-relevante Infos erhalten Sie etwa mit Hilfe der Funktionen stringlist::alloc (3, kSelected) oder productlist::get ("selected").
Ermittle die ID plid des ersten ausgewählten Eintrages der Produktrecherche.
#include "internal/panels.h" StringList sl = stringlist::alloc (kPanelProducts, kSelected); int plid = 0; if (stringlist::length (sl) > 0) { plid = stringlist::getint (sl, 0, "ID"); }
[ab v3.3 R2660, 26. Sept. 2011] Die Ergebnisliste kann mit zwei Suchfeldern eingschränkt werden. Auf die Inhalte der Suchfelder kann wie folgt zugegriffen werden :
Anweisungstyp | Beschreibung |
select, xmlquery, SOAP-Call |
<SearchField1>, <SearchField2> Die Tags werden jeweils durch den aktuellen Inhalt der Suchfelder plus '%' ersetzt. Sollen die Suchkriterien Strings ersetzen, müssen die Tags ebenfalls in gültige Anführungszeichen gesetzt werden. <SearchField1_nopercent>, <SearchField2_nopercent> Diese Tags werden mit dem aktuellen Inhalt der Suchfelder ohne '%' ersetzt. Sollen die Suchkriterien Strings ersetzen, müssen die Tags ebenfalls in gültige Anführungszeichen gesetzt werden. |
cScript |
char * gSearchField1, gSearchField2; Die beiden Variablen sind mit den aktuellen Inhalten der Suchfelder gefüllt. Es wird kein '%' an den Inhalt angefügt. |
Die Suchfelder können anweisungsbezogen beschriftet werden. Dazu können Sie in den Definitionen der Previewstatements dem Namen des Eintrages die Namen der Suchfelder jeweils durch ## getrennt anfügen. Die einzelnen Namensteile werden jeweils übersetzt.
Hier eine XML-Definition eines Previewstatements mit eigenen Namen für die Suchfelder:
<id>1004</id>
<name>Einige Templates (Script)##Namensanfang##ID kleiner</name>
<classid>6</classid>
<needsselection>0</needsselection>
<condition></condition>
<statement>...</statement>
<sequencenr>0</sequencenr>
<domain></domain>
<isdefault>0</isdefault>
</previewstatement>
Die Einträge der Liste können auf Doppelklicks reagieren. Die auszuführenden Aktion wird wie folgt definiert :
Hier einige Beispiele von gültigen Panelstatements mit denen die Doppelklick-ID definiert werden kann.
select 900+<depth> from dual; "datafiles.xml" -- beliebige XML-Datei select 900+<depth> select id%3 from ... where ID = ? select id%3 from ... where ID = <ID> -- Die ?en sind optional
Und hier ein einfaches Doppelklick-Skript
int main () { showmessage ("Zeile %d, ID = %d", gClicked+1, gRecordID); return 1; }
Nach dem Einfügen ins Dokument können die neuen Daten mit dem sog. Link-Skript nachbearbeitet werden. Sie können in diesem Skript beispielsweise die Objekt-ID des Zielplatzhalters neu setzen.
Das Link-Skript wird im Hilfetext der Einträge angegeben.
So definieren Sie ein Linkskript für einen Eintrag der Previewpalette.
In den Linkskripten sind die folgenden globalen Variablen definiert:
Name | Typ | Beschreibung |
gRecordID | int |
ID des Previeweintrages, der das Skript ausgelöst hat. |
gRecordID2 | ||
gRecordID3 | ||
gRecordStringID | string | |
gRecordStringID1 | ||
gRecordStringID2 | ||
gRecordStringID3 | ||
gImageAlign | int | Einstellung von Bildposition und -skalierung in der Palette Previews |
gImageSize | float | Zur Zeit immer 0.0 |
gInsertedFrames | ItemList |
Snippets können neue Rahmen ins Dokument einfügen. Die Liste enthält die neu eingefügten Rahmen. Wurden keine Rahmen eingefügt, ist diese Liste gleich 0. Rahmen können auch als Inline-Rahmen eingefügt werden. Beachten Sie die Einschränkungen, die für Inline-Rahmen gelten. Sie dürfen diese Rahmen beispielsweise nicht einfach auf eine neue Seite oder eine andere Ebene verschieben. |
gSnippetStart | int |
Aktuelle Einfügeposition und -länge bei Textersetzungen. Werden die Inhalte von Textplatzhaltern durch einfache Texteinträge ersetzt, sind diese Angaben identisch zu gStart und gLen. Beim Einfügen von Textsnippets wird der Platzhalter aber entfernt, gStart ist dann 0, gLen die Länge des gesamten Textes. Damit Sie die aktuellen Textpositionen trotzdem wissen, gibt es gSnippetStart und gSnippetLen. Werden Snippetrahmen ins Dokument eingesetzt (und nicht als Inlines in den Text) haben die Variablen folgenden Werte : |
gSnippetLen |
Die Skripte für Text, Bild und Snippet unterscheiden sich im grundsätzlichen Aufbau ein wenig. Hier für jeden Fall ein Beispiel.
Ein Text wurde eingesetzt (nicht durch ein Snippet). Die ID des Previeweintrages soll danch als Objekt-ID verwendet werden. Zur Demonstration wird an den neuen Text noch ein weiterer Text angefügt.
Achtung : Im allgemeinen ist das so natürlich nicht ganz richtig. Die IDs der Previewliste sind normalerweise keine gültigen Objekt-IDs. In diesem Fall hätten Sie ja die Produktpalette verwenden können.
int main () { placeholder::link ( gFrame, 3, gRecordID, gRecordID2, gRecordID2, gStart, gLen, gRecordStringID); textmodel::append ("AAA"); return 0; }
Ein Bild wurde ersetzt. Vergrössere es rahmenfüllend und zentriere es.
int main () { frame::fit_image (gFrame, 1); frame::fit_image (gFrame, 5, 5); return 0; }
Ein Snippet wurde eingesetzt. Wurde Text ersetzt (auch durch Inline-Rahmen), wird hinter dem neuen Text eine Markierung eingesetzt. Wurden Seitenrahmen eingesetzt, bekommen diese eine zufällige (aber jeweils gleiche) Farbe.
int main () { if (gSnippetLen >= 0) { textmodel::insert ("by action 905", gSnippetStart+gSnippetLen); } else if (gInsertedFrames) { itemlist::apply ( frame::color_rgb, gInsertedFrames, 0, random (255), random (255), random (255), -1, -1); } return 0; }
[ab v4.0.5 R8410] Comet-Snippets sind InDesign®-kompatible Versionen aufgebauter Produkte. Sie können an beliebiger Stelle in Dokumente eingefügt werden. Comet4-Snippets können eindeutig zugeordnet werden in der Kombination der folgenden drei Angaben:
Comet-Snippets können nicht über mehrere Seiten gehen. Beim Sichern von Snippets werden daher auch nur Produkte gesichert, die keine Fortsetzungen haben. Zum Anlegen und Löschen von Comet-Snippets verwenden Sie die Buttons +, •, x der Previews-Palette oder die Skriptbefehle productlist::create_snippets und productlist::remove_snippets.
Im Produktaufbau kann entschieden werden, ob Produkte jeweils neu aufgebaut werden sollen oder ob ein Comet4-Snippet verwendet werden soll. Beim Einfügen von Snippets werden keine Platzhalterdaten geladen und keine weitere Gestaltungsregeln ausgeführt.
Im Popupmenü der Suchmethoden befinden sich zwei Methoden zum Anzeigen der verfügbaren Comet-Snippets:
Die Menüs sind nur verfügbar, wenn die aktuelle Datenverbindung Comet-Snippets unterstützt (Mehr dazu siehe hier.)
Die Menüs werden immer ans Ende der Suchmethoden angefügt.
Mit der Checkbox an Dokumentauswahl/Produktauswahl anpassen können Sie das automatische Neuladen der Snippets unterdrücken.
Achtung: Die hier beschriebenen Snippets sind nicht identisch mit den oben beschriebenen Comet-Snippets.
Hier eine gültigeSQL-Anweisung zum Laden der Preview-IDs. Alle Einträge der Tabelle comet_snippets_2 sollen in der Liste gezeigt werden.
select id, 0, 0, '', 3, 0, 0, 0, 0, '', 1, 1 from comet_snippets_2 where id > 0
Passend zum zweiten Beispiel des Listenladens hier die Anweisung zum Laden der Snippeteinträge. Die Snippets werden nicht aus der Standardtabelle pageitems geladen, auch die IDs stammen nicht aus dieser Tabelle. Damit beim Einsetzen eines Snippets in ein Dokument die richtige Datendatei verwendet wird, müssen Tabelle (comet_snippets_2) und Attribut (data) der Datenquelle hier angegeben werden.
select name, "snippet@select preview from comet_snippets_2 where id = <ID>", "" , CONVERT (rightPos-leftPos, UNSIGNED), CONVERT (bottomPos-topPos, UNSIGNED), 0, 0, 2, // hasButtonState der Listensuche auf 1 setzen! 0, // hasLinkState der Listensuche auf 1 setzen! "Info1", "Info2","info3" , "Snippetbeschr", "comet_snippets_2", "data" from comet_snippets_2 where id = <ID>
Die Tabelle comet_snippets_2 muss mind. wie folgt definiert sein (mySQL) :
create table snippets
(
ID int(10),
name varchar (4000),
data longblob,
preview longblob,
format int(10),
leftPos float(10,4),
topPos float(10,4),
rightPos float(10,4),
bottomPos float(10,4)
);
Und hier ein Beispielskript, wie die Tabelle comet_snippets_2 gefüllt werden könnte.
#include "internal/types.h" int main () { Query qu = sql::query (sql::dbconnection ()); long id = 0; char path [2000]; ItemList frames = itemlist::selected (); Image img = 0; float l, t, r, b; // create content strcpy (path, "$DESKTOP/aaa"); itemlist::create_snippet (frames, path, 1); itemlist::bbox (frames, &l, &t, &r, &b); img = image::snapshot_frames (frames, 100); // next free comet_snippet idquery::send (qu, "select max(id) from comet_snippets_2"); query::output (qu, kInt, &id); query::exec (qu); while (query::fetch (qu)) {} id = id + 1; // create the new entryquery::send (qu, "insert into comet_snippets_2 (ID, active, leftPos, topPos, rightPos, bottomPos) values (?, 3, ?, ?, ?, ?)"); query::input (qu, kInt, id); query::input (qu, kFloat, l); query::input (qu, kFloat, t); query::input (qu, kFloat, r); query::input (qu, kFloat, b); query::exec (qu); // store snippet strcat (path, ".idms"); query::send (qu, "update comet_snippets_2 set data = ?, preview = ?, format = 3 where ID = ?"); query::input (qu, kBinfile, path, kCopyLocalFile, "PICT"); query::input (qu, kImage, img); query::input (qu, kInt, id); query::exec (qu); // clean up query::close (qu); image::release (img); itemlist::release (frames); file::remove (path); return 0; }
Bei der Anzeige von Bilddateien ohne Preview wird versucht, aus der angegebenen Datei ein für die Anzeigegröße passendes Preview zu erzeugen. Die Berechnung der Previews kann einige Zeit in Anspruch nehmen, deshalb werden einmal erzeugte Previews auf Ihrer Festplatte aufgehoben. Ändert sich die Originaldatei, wird das Preview automatisch neu berechnet. Die Previews werden in den Voreinstellungen des Benutzers abgelegt :
Die Dateien und Ordner dieser Ablage dürfen gelöscht, aber nicht geändert werden. Mit Hilfe des Buttons können sie auch direkt über die Palette gelöscht werden.
Die Previewdateien enthalten, obwohl ihre Endung das vermuten lässt, keine gültigen Bilddateien des jeweiligen Bildformates und können nicht mit anderen Grafikprogrammen geöffnet werden. Das Format dieser Dateien ist wie folgt (und die eigentlichen Bilddaten des Previews beginnen erst beim letzten Eintrag der Formatbeschreibung):
Datentyp | Wert | Beschreibung |
int | flen | Länge des folgenden Strings mit der Angabe des Dateiformates |
flen chars | Dateiformat | |
int | Bildbreite in Pixel | |
int | Bildhöhe in Pixel | |
int | Bildauflösung in dpi | |
int | Farbtiefe (1, 2, 4, 8, 24) | |
int | blen | Größe des Previews in Bytes |
int | Previewbreite in Pixel | |
int | Previewhöhe in Pixel | |
int | Bits pro Bildzeile (für die Farbtiefe des Previews) | |
int | 1 | Internes Bildformat |
int | 24 | Intern verwendete Farbtiefe |
blen chars | Previewdaten |