[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Sublayer unbenennen

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Print/Bildbearbeitung - Photos, Layout, Design
Themen
Beiträge
Moderatoren
Letzter Beitrag

Sublayer unbenennen

zm3k
Beiträge gesamt: 11

14. Dez 2020, 10:14
Beitrag # 1 von 15
Bewertung:
(19756 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hello,

ich habe eine Layerstruktur mit

Ebene1>Inhalt1
>Inhalt2

Wie kann ich im Layer Ebene1 den Sublayer Inhalt1 umbenennen.

Hab schon einiges ausprobiert aber funktioniert nicht wie ich möchte.

Wäre für Infos dankbar.

lg Michael
X

Sublayer unbenennen

Martin Fischer
  
Beiträge gesamt: 12783

14. Dez 2020, 10:49
Beitrag # 2 von 15
Beitrag ID: #577955
Bewertung:
(19741 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo zm3k,

Antwort auf: Hab schon einiges ausprobiert aber funktioniert nicht wie ich möchte.


Zeig mal, wie Du bislang vorgegangen bist.


als Antwort auf: [#577953]

Sublayer unbenennen

zm3k
Beiträge gesamt: 11

14. Dez 2020, 11:25
Beitrag # 3 von 15
Beitrag ID: #577956
Bewertung:
(19726 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hello,

Code
 
var myDoc = app.activeDocument ;
var mypoplayer = myDoc.layers.itemByName("popup");



var mypop = ("/Users/zm3k_/Documents/Arbeit/qmm_emag_conniseurcircle_2020/Elemente/Popup/popup_new.idms");
var mybtn = ("/Users/zm3k_/Documents/Arbeit/qmm_emag_conniseurcircle_2020/Elemente/Popup/minus.idms");

//Schaut nach ob Popup layer vorhanden ist

if( !mypoplayer.isValid )
{
mypoplayer =
myDoc.layers.add
(
{
name : "popup" ,
layerColor : UIColors.MAGENTA
}
);

myDoc.activeLayer = mypoplayer;
myDoc.activeLayer.move( LocationOptions.AT_BEGINNING );
myDoc.placeGuns.loadPlaceGun(mypop);

//+++ hier wollte ich in den ordner eine suche nach POPUP1 starten
if (!mypoplayer.layer.itemByName("POPUP1").isValid)
{
alert("Sublayer Popup ist vorhanden")
}
else
{
alert("Sublayer ist nicht vorhanden")
}

}
else
{
mypoplayer.layerColor = UIColors.MAGENTA
alert("Popuplayer ist schon vorhanden")
myDoc.activeLayer = mypoplayer;
myDoc.activeLayer.move( LocationOptions.AT_BEGINNING );
myDoc.placeGuns.loadPlaceGun(mypop);
//++++++++++hier möchte ich den layer mypop den ich gerade per placeguns geladen habe umbenennen.
//+++ hier wollte ich in den ordner eine suche nach POPUP1 starten
if (!mypoplayer.layer.itemByName("POPUP1").isValid)
{
alert("Sublayer Popup ist vorhanden")
}
else
{
alert("Sublayer ist nicht vorhanden")
}
};


Ich verstehe nicht wie ich in js layer nach sublayern durchsuchen kann, und was der unterschied zwischen layers und layer ist.


als Antwort auf: [#577955]
(Dieser Beitrag wurde von zm3k am 14. Dez 2020, 11:26 geändert)

Sublayer unbenennen

Martin Fischer
  
Beiträge gesamt: 12783

14. Dez 2020, 12:28
Beitrag # 4 von 15
Beitrag ID: #577957
Bewertung:
(19699 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Auf die Schnelle (bin gleich weg):

Layers sind ggf. verschachtelt:
Ein Layer kann weitere Layer beinhalten.

Code
doc.layers.itemByName('POPUP').layers.itemByName('POPUP1') 


Wichtig ist der Plural layers.


als Antwort auf: [#577956]

Sublayer unbenennen

Uwe Laubender
Beiträge gesamt: 5318

14. Dez 2020, 13:50
Beitrag # 5 von 15
Beitrag ID: #577959
Bewertung:
(19659 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Zitat von Michael ich habe eine Layerstruktur mit

Ebene1>Inhalt1
>Inhalt2


Hallo Michael,
nein, hast Du nicht.
InDesign kennt keine verschachtelten Ebenen.

Was Du möglicherweise siehst sind Elemente, die andere Elemente enthalten.
Beispielsweise Gruppen oder Grafikrahmen in die andere Rahmen eingefügt wurden.
Oder Du siehst den aktiven Status eines Schaltflächenobjekts oder eines Multistatus-Objekts.

Um den Wert für die Eigenschaft name zu ändern, kannst Du beispielsweise das Array allPageItems eines spreads per Schleife durchwandern. Hast Du ein Element namens "Inhalt2" gefunden und ist der Wert von itemLayer gleich der gewünschten Ebene, ist ziemlich wahrscheinlich, dass Du das korrekte Element gefunden hast.


als Antwort auf: [#577953]

Sublayer unbenennen

Uwe Laubender
Beiträge gesamt: 5318

14. Dez 2020, 18:50
Beitrag # 6 von 15
Beitrag ID: #577962
Bewertung:
(19590 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Michael,

also, wenn Du mir konkret sagen kannst, welches wie benamte Element Du in Deiner Ebenenstruktur umbenennen möchtest, dann kann ich Dir auch konkret einen Code-Vorschlag machen.


als Antwort auf: [#577953]

Sublayer unbenennen

zm3k
Beiträge gesamt: 11

16. Dez 2020, 06:44
Beitrag # 7 von 15
Beitrag ID: #577974
Bewertung:
(19428 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hello Uwe,


die Ebene den ich umbenennen will heisst "POPUP1" die wird mittels placegun platziert und wird automatisch in die Ebene/Ordner "popup" verschoben. Also müsste man in der Ebene/Ordner "popup" nach "POPUP1" suchen und diesen dann umbenennen.

Der Ablauft den ich eigentlich vorhabe ist ein bisschen ein aufwendiger.

Ich möchte ein Bild auswählen, und dieses Bild in ein Popup reinladen. Dieses Popup ist im "empty" State unsichtbar und wird durch einen Button (den ich auch per placegun reinlade) sichtbar, indem dieser button den "empty" state auf "popup" state ändert. In diesem Popup möchte ich in einem Ramen (der schon vorhanden ist) dieses Bild reinladen und die Größe an die Ramen breite anpassen. Hoffe es ist verständlich was ich vorhabe. ^^

Der Ablauf sollte so sein:
Code
         -ich wähle das Bild aus,  
-klicke auf das Script,
-dieses speichert das Bild,
-läd die 2 Snippets (Popup-Snippet, Button-Snippet) hinein,
-verschiebt das Popup-Snippet in den "popup" Ordner
-benennt das Popup-Snippet welches "POPUP1" heisst um.
-verschiebt das Button-Snippet in den "button" Ordner
-benennt das button-Snippet welches "BUTTON1" heisst um.
-such den umbenannten "POPUP1" Layer
-sucht in diesem Layer einen Sub-Layer der sich "RAMEN1" nennt und ladet dort das Bild hinein
-passt dort die größe des Bildes an den Ramen an.
-Sucht im button Ordner nach dem umbenannten "BUTTON1" Layer
-gibt den umbenannten "BUTTON1" Layer ein Klick Event welches den Status von umbenannten "POPUP1" ändert.


Hoffe es ist verständlich.

lg Michael


als Antwort auf: [#577962]

Sublayer unbenennen

Uwe Laubender
Beiträge gesamt: 5318

16. Dez 2020, 08:29
Beitrag # 8 von 15
Beitrag ID: #577976
Bewertung: |||
(19395 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Michael,
Du hast immer noch ein Verständnisproblem oder -durcheinander, was "Ebenen" in InDesign angeht.

Wenn Du ein Element in der PlaceGun geladen hast, dann handelt es sich auf keinen Fall um eine "Ebene". Das ist in Deinem Fall ein Element, allgemein pageItem, das mit dem Namen "POPUP1" ausgezeichnet ist.

Ebenen in InDesign sind nur das, was Du neu direkt im Ebenenbedienfeld anlegen kannst.
Alles andere sind Seitenelemente, sog. pageItems in der Skriptsprache ExtendScript.
Um's ein wenig abstrakter auszudrücken:

Der Elter einer Ebene ( layer ) ist immer direkt das Dokument.

Um was genau handelt es sich da, was den Namen "POPUP1" trägt?
Ein Rechteck? Ein Textrahmen? Etwas anderes?

Zum Umbenennen hast Du mir nun zwei Dinge genannt, eines fehlt allerdings:

Name des Objekts, das umbenannt werden soll: "POPUP1".
Ebene, in der sich das Objekt nach dem Platzieren mit der PlaceGun befindet: "popup".
Neuer Name: ???

Somit können wir das Umbenennen folgendermaßen vornehmen, wenn die PlaceGun im aktiven Druckbogen entladen wurde, falls in einem anderen Druckbogen, müssen wir den erst noch bestimmen:

Code
var newName = "Mein neuer Name"; // Bitte anpassen 
var oldName = "POPUP1";
var targetLayerName = "popup";
var result = false ;

var doc = app.documents[0];

var targetLayer = doc.layers.itemByName( targetLayerName );

if( !targetLayer.isValid )
{
alert
(
"FEHLER:" +"\r"+
"Die Zielebene "+targetLayerName+" ist nicht vorhanden!"
);
};
else
{
var spread = app.layoutWindows[0].activeSpread;
var allPageItemsOfSpread = spread.allPageItems;
var allPageItemsOfSpreadLength = allPageItemsOfSpread.length;

for( var n=0; n<allPageItemsOfSpreadLength; n++ )
{
if
(
allPageItemsOfSpread[n].name == oldName &&
allPageItemsOfSpread[n].itemLayer == targetLayer
)
{
allPageItemsOfSpread[n].name = newName ;
alert
(
"ERGEBNIS OK:" +"\r"+
"Objekt wurde gefunden und umbenannt!"
);
result = true ;
break
};
};
};

if( !result )
{
alert
(
"ERGEBNIS NICHT OK:" +"\r"+
"Objekt wurde nicht gefunden!"
);
};



Weiterführende Hilfe in Bezug auf das, was Du noch machen möchtest:
Wie bekomme ich ein Objekt in ein anderes verschachtelt hinein? In eine Gruppe, Status, Rechteck, Oval, Polygon, ist nicht ganz trivial, um's mal vorsichtig auszudrücken.


als Antwort auf: [#577974]

Sublayer unbenennen

Uwe Laubender
Beiträge gesamt: 5318

16. Dez 2020, 15:09
Beitrag # 9 von 15
Beitrag ID: #577994
Bewertung:
(19326 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ich schrieb:
"Ebene, in der sich das Objekt nach dem Platzieren mit der PlaceGun befindet: "popup"."

Falls Du hier allerdings keine InDesign-Ebene meinst, sondern ein anderes Element, das "popup" heißt, wird's interessant. Dann könnte man in der Schleife nach dem Namen des parent des Elements suchen, das "POPUP1" heißt. Ob das dann genau der parent oder möglicherweise sogar der parent.parent ist, bleibt abzuwarten. Das Ebenen-Bedienfeld bildet leider nicht immer die wirklichen Verschachtelungsverhältnisse zwischen den Elementen ab.

Falls Element "POPUP1" in Text verankert sein kann, müssten zudem noch mehr Prüfungen laufen. Zum Beispiel, ob das parent-Objekt vom Typ Character ist.

Davon mal ab: Hast Du mehrmals mit der PlaceGun die gleichen Elemente platziert, gibt's Element "POPUP1" auch mehrmals. Dann darf man die Schleife durch die allPageItems nicht mit break abbrechen, wenn das erste Vorkommen abgearbeitet ist.


als Antwort auf: [#577976]

Sublayer unbenennen

Uwe Laubender
Beiträge gesamt: 5318

16. Dez 2020, 15:38
Beitrag # 10 von 15
Beitrag ID: #577996
Bewertung:
(19316 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Um die Geschichte abzuzkürzen:
Stell' mal eine InDesign-Datei auf Dropbox (oder benutze einen ähnlichen Service) und poste den Download-Link zur Datei, die die Elemente enthält.

Sonst raten wir uns hier dumm und dusselig.


als Antwort auf: [#577974]

Sublayer unbenennen

zm3k
Beiträge gesamt: 11

18. Dez 2020, 12:22
Beitrag # 11 von 15
Beitrag ID: #578014
Bewertung:
(19079 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ja das mit den Ebenen oder Pageitems ist mir wirklich noch sehr unklar da es für mich so aussieht als würden reingeladene Objekte auch so aussehen als wären sie Ebenen und nicht pageitems.

Zitat Um was genau handelt es sich da, was den Namen "POPUP1" trägt?
Ein Rechteck? Ein Textrahmen? Etwas anderes?


Es ist ein Multistate Object. Welches einen "Emty" und einen "Popup" zustand hat, dieser behinhalet mehrere verschachtelte Ordner wo Fläche"Hintergrund", Fläche"Popup" leerer ramen "Ramen" und Schaltfläche"Minusbutton" drinnen sind.

Zitat Name des Objekts, das umbenannt werden soll: "POPUP1".
Ebene, in der sich das Objekt nach dem Platzieren mit der PlaceGun befindet: "popup".
Neuer Name: ???

Neuer Name wäre dann zb. ("Popup " + a) a wäre eine Random Zahl von 1-1000

Stimmt das Objekt was umbenannt werden soll ist "POPUP1" welches in der Ebene "popup" drinnen ist. Es ist so dass ich immer das gleiche Objekt "POPUP1" reinladen möchte und dieses wird dann von anderen Schaltfächen "aktiviert" per Schaltflächen-Eigenschaft "Klick" und "gehte zu Status". Bei "gehe zu Status" muss man das Multistate Objekt angeben, in meinen Fall das Objekt mit den Namen "POPUP1" (welches ja unbennant werden soll), da noch mehrere Popups reingeladen werden sollen braucht es immer einen neuen einzigartigen Namen auf das sich Schaltfächen beziehen können. Hoffe es ist verständlich ^^


Zitat Ich schrieb:
"Ebene, in der sich das Objekt nach dem Platzieren mit der PlaceGun befindet: "popup"."


Das ist jetzt die Frage da ich mit
Code
if( !mypoplayer.isValid )  
{
mypoplayer =
myDoc.layers.add
(
{
name : "popup" ,
layerColor : UIColors.MAGENTA
}
);


Vlt kannst du mich aufklären:
Ein Layer wie
Code
myDoc.layers.add 

ist ein PageItem und nur die Layer welche ich im Indesign händisch hinzufüge, sind Layer und kann man im code nur mittels "Layers" ansprechen?


Bei einem Object welches Ebenen enthält und ich per
Code
myDoc.placeGuns.loadPlaceGun(mypop); 

reinlade hat das jetzt Ebenen welche mit "Layers" engesprochen werden oder mit Pageitems.
*verwirrt bin*

Ich müsste wissen wie ich die Objekte im Indesign per Sript ansprechen kann.

Um nicht noch mehr zu verwirren, stelle ich heute Abend einen Link mit der Datei hoch damit man versteht was ich meine.

Danke Uwe für deine Hilfe, wirklich toll.

LG Michael


als Antwort auf: [#577976]
(Dieser Beitrag wurde von zm3k am 18. Dez 2020, 12:38 geändert)

Sublayer unbenennen

Uwe Laubender
Beiträge gesamt: 5318

19. Dez 2020, 16:13
Beitrag # 12 von 15
Beitrag ID: #578019
Bewertung:
(18835 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Zitat von zm3k …Es ist ein Multistate Object.…


Na prima. Du suchst Dir als Scriptanfänger gleich eines der kompliziertesten Elemente aus.
Sehe ich das richtig, noch hast Du keinen Link zu einer InDesign-Datei gepostet?

Falls Du Langeweile über Weihnachten hast, dann schau Dir mal die Struktur eines MSOs in der DOM-Dokumentation an:
http://jongware.mit.edu/...ultiStateObject.html

Ganz besonders das State Objekt:
http://jongware.mit.edu/idcs6js/pc_State.html

Und die Methode addItemsToState() :
http://jongware.mit.edu/...html#addItemsToState


als Antwort auf: [#578014]

Sublayer unbenennen

zm3k
Beiträge gesamt: 11

20. Dez 2020, 07:18
Beitrag # 13 von 15
Beitrag ID: #578021
Bewertung:
(18594 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hello Uwe,

Naja ich schreibe das was ich halt nunmal braucht nicht was am einfachsten ist.^^ die wahl hab ich da eher weniger.

Stimmt ich kenn mich mit Javascript und den elementen von Indesign nicht aus. Habe aber schon längere Erfahrung mit VBA in Excel also sehe ich es eigentlich ähnlich wie dort.

Stimmt, ich könnte ich zeitlich derzeit noch nicht machen, aber ich lade es hoch. Die Links schau ich mir natürlich an.

Alles Liebe Michael


als Antwort auf: [#578019]

Sublayer unbenennen

zm3k
Beiträge gesamt: 11

20. Dez 2020, 09:59
Beitrag # 14 von 15
Beitrag ID: #578022
Bewertung:
(18555 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
https://www.dropbox.com/sh/z08ok3tp3kugcxg/AAAD-Dr_g_fPe9xpy486BL8sa?dl=0

sollte runterladbar sein.

Lg Michael


als Antwort auf: [#578021]

Sublayer unbenennen

Uwe Laubender
Beiträge gesamt: 5318

23. Dez 2020, 14:09
Beitrag # 15 von 15
Beitrag ID: #578067
Bewertung:
(17838 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Michael,
ich hatte mal Zeit in Deine Beispieldatei zu schauen.
Aber ich blicke nicht durch, wo was hin soll. Zuviele Objekte und Ebenen haben den gleichen oder einen ähnlichen Namen.

In Deiner Beispieldatei ist ein MSO auf der Seite positioniert.
Der aktive Status trägt den Namen "popup".

Hinter dem MSO ist eine Schaltfläche mit Namen "Schaltfläche 13".

Wo genau willst Du diese Schaltfläche hineinschieben?
In den aktiven Status des MSOs?


Dann geht das folgendermaßen:

Code
var doc = app.documents[0]; 
var myMSO = doc.spreads[0].multiStateObjects[0];
var myButton = doc.spreads[0].buttons[0];

// Get state with name "popup"
var targetState = myMSO.states.itemByName("popup");

// Make the state to the active one:
targetState.active = true ;

// Add button to active state:
targetState.addItemsToState( [myButton] );



als Antwort auf: [#578022]
X