[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Hyperlink automatisch wie Quelle benennen

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

Hyperlink automatisch wie Quelle benennen

Almute
Beiträge gesamt: 14

31. Okt 2011, 15:20
Beitrag # 1 von 8
Bewertung:
(4802 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

ich habe ein Script, in dem ich automatisch Hyperlinks an zuvor per Script (mit einer GREP-Funktion) ausgewählten Textstellen erzeuge. Damit ich diese Hyperlinks später besser unterscheiden kann, möchte ich sie automatisch so benennen lassen, wie der mit dem Hyperlink versehene Text lautet.

Ich habe die Textstelle für den Hyperlink mit

Code
var myErgebnisse = app.activeDocument.findGrep(true); 
var myErgebnis = myErgebnisse[i] ;


gesucht und das Ergebnis als Variable definiert. Wie muss ich die Variable myErgebnis in

Code
myHyperlink.name = 

eingeben, damit der Hyperlink dann den gewünschten Namen bekommt?
X

Hyperlink automatisch wie Quelle benennen

Martin Fischer
  
Beiträge gesamt: 12669

31. Okt 2011, 20:19
Beitrag # 2 von 8
Beitrag ID: #483480
Bewertung:
(4772 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Almute,

mit Deinem Code kann ich konkret nur wenig anfangen und müßte nun etwas spekulieren, was alles im Verborgenen bleibt.


Daher hier ein Versuch einer abstrakten Antwort:

Ein Hyperlink hat eine Eigenschaft name.
Das ist der eindeutige Name des Hyperlinks, den es kein zweites Mal im Dokument geben kann.

Darüberhinaus hat ein Hyperlink eine source.
In Deinem Fall vermutlich eine HyperlinkTextSource (und nicht etwa eine CrossReferenceSource oder eine HyperlinkPageItemSource).

Diese HyperlinkTextSource hat eine Eigenschaft sourceText.
Und hinter dessen contents steckt der Textinhalt der Hyperlinkquelle.

Nun vermute ich, dass Du den Namen eines Hyperlinks aus dem Textinhalt der Hypelinkquelle definieren möchtest. Achte darauf, dass ein Name nur einmal vorkommen kann und treffe entsprechende Vorkehrungen.


als Antwort auf: [#483459]

Hyperlink automatisch wie Quelle benennen

Almute
Beiträge gesamt: 14

31. Okt 2011, 20:34
Beitrag # 3 von 8
Beitrag ID: #483481
Bewertung:
(4764 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

Antwort auf [ Martin Fischer ] Nun vermute ich, dass Du den Namen eines Hyperlinks aus dem Textinhalt der Hypelinkquelle definieren möchtest. Achte darauf, dass ein Name nur einmal vorkommen kann und treffe entsprechende Vorkehrungen.


Du hast genau richtig interpretiert. Mit dem Anlegen des Hyperlinks selbst habe ich keine Probleme - das funktioniert richtig. Aber die Hyperlinks heißen "Hyperlink", "Hyperlink1" usw.
Ich möchte nun wissen, wie ich den Namen eines Hyperlinks aus dem Textinhalt der Hypelinkquelle definieren kann.
Ich habe den Textinhalt in der Variablen
Zitat myErgebnis

gespeichert.
Wenn ich
Code
 myHyperlink.name = myErgebnis 

definiere, heißt der Hyperlink "myErgebnis" und nicht so wie der in der Variable gespeicherte Text. Wie muss der Code korrekt heißen?


als Antwort auf: [#483480]

Hyperlink automatisch wie Quelle benennen

Martin Fischer
  
Beiträge gesamt: 12669

31. Okt 2011, 20:46
Beitrag # 4 von 8
Beitrag ID: #483482
Bewertung:
(4758 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Versuch's mal mit
Code
myHyperlink.name = myHyperlink.source.sourceText.contents; 

Prüfe aber zuvor, ob es einen Hyperlink mit diesem Namen bereits gibt (isValid) und treffe entsprechende Vorkehrungen.


als Antwort auf: [#483481]

Hyperlink automatisch wie Quelle benennen

Almute
Beiträge gesamt: 14

31. Okt 2011, 21:07
Beitrag # 5 von 8
Beitrag ID: #483483
Bewertung:
(4742 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Danke, es funktioniert.

Antwort auf [ Martin Fischer ] Versuch's mal mit
Code
myHyperlink.name = myHyperlink.source.sourceText.contents; 

Prüfe aber zuvor, ob es einen Hyperlink mit diesem Namen bereits gibt (isValid) und treffe entsprechende Vorkehrungen.


Das werde ich dann noch versuchen, einzuarbeiten.


als Antwort auf: [#483482]

Hyperlink automatisch wie Quelle benennen

WernerPerplies
Beiträge gesamt: 2693

1. Nov 2011, 06:05
Beitrag # 6 von 8
Beitrag ID: #483488
Bewertung:
(4705 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Almute,

in meinen Hyperlink-Scripts löse ich dieses Problem, in dem ich über die bereits vergebenen Namen in einem Array Buch führe:

in etwa so:

var names = new Array();

// hier erzeugst Du Deinen Hyperlink
// dann holst Du Dir Deinen Namen über die Funktion
getName(names, name);
myHyperlink.name = getName(names, myHyperlink.source.sourceText.contents);

Die Funktion getName sieht so aus:
Code
/*string*/function getName(names, name) 
{
for (var i = 0; i<names.length; i++)
{
if (names[i].name ==name)
return names[i].name + "(" + (++names[i].counter).toString()+ ")";
}
names.push({name: name, counter: 0});
return names[names.length-1].name;
}

hth


als Antwort auf: [#483483]
(Dieser Beitrag wurde von WernerPerplies am 1. Nov 2011, 06:10 geändert)

Hyperlink automatisch wie Quelle benennen

Martin Fischer
  
Beiträge gesamt: 12669

1. Nov 2011, 09:20
Beitrag # 7 von 8
Beitrag ID: #483494
Bewertung:
(4677 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Die oben angegebene Funktion getName() funktioniert nicht zuverlässig und kann unter bestimmten Bedingungen Fehler erzeugen.

Da sie ursprünglich vom Bestand der Namen der Hyperlinks entkoppelt ist, besteht die Möglichkeit, dass die Funktion für einen Hyperlink einen neuen Namen ermittelt, der von einem anderen Hyperlink, welcher in der Schleife erst später geprüft wird, bereits verwendet wird.

Um dies zu verhindern wurde in der folgenden Version eine Prüfung eingebaut, ob ein Hyperlink mit dem ermittelten Namen bereits existiert oder eine Umbenennung überhaupt notwendig ist (der ermittelte neue Name entspricht dem ursprünglichen Namen).

Code
var counter = new Array; 
var _hyperl = app.activeDocument.hyperlinks;

for (var i = _hyperl.length-1; i>= 0; i--)
{
if (_hyperl[i].source.constructor.name == 'HyperlinkTextSource')
{
_hyperl[i].name = get_name(counter, _hyperl[i].source.sourceText.contents, _hyperl[i].name);
}
}

function get_name(counter, name, old_name)
{
// der ermittelte Name entspricht dem alten Namen => es bleibt beim alten Namen
if (name == old_name)
{
return old_name;
}

// Zähler für den Namen existiert noch nicht
else if (counter[name] == undefined)
{
counter[name] = 0;
var new_name = name;
}

// Zähler für den Namen existiert
else
{
counter[name]++;
var new_name = name + '_' + counter[name];
}

// Prüfung, ob ein Hyperlink des ermittelten Namens bereits besteht
while (app.activeDocument.hyperlinks.itemByName(new_name).isValid )
{
new_name = get_name(counter, name, old_name)
}
return new_name;
}



Der Code ist als Skriptstudie nicht besonders elegant, da zu sehr dieser speziellen Prüfung auf Hyperlinknamen verhaftet. Er sollte abstrakter bzw. verallgemeinert werden.
Es sind im Moment auch unschöne Unterbrechungen der Zählung möglich, wenn best. Namen mit Zähler vor Ausführung des Skripts bereits bestehen:

Code
Verwendung 
Verwendung_4
Verwendung_5
Verwendung_6


statt
Code
Verwendung 
Verwendung_1
Verwendung_2
Verwendung_3



als Antwort auf: [#483488]
(Dieser Beitrag wurde von Martin Fischer am 1. Nov 2011, 09:24 geändert)

Hyperlink automatisch wie Quelle benennen

WernerPerplies
Beiträge gesamt: 2693

1. Nov 2011, 09:47
Beitrag # 8 von 8
Beitrag ID: #483496
Bewertung:
(4657 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Guten Morgen Martin,

Zitat Die oben angegebene Funktion getName() funktioniert nicht zuverlässig und kann unter bestimmten Bedingungen Fehler erzeugen.


geht's bitte ein wenig präziser?

Zitat Da sie ursprünglich vom Bestand der Namen der Hyperlinks entkoppelt ist, besteht die Möglichkeit, dass die Funktion für einen Hyperlink einen neuen Namen ermittelt, der von einem anderen Hyperlink, welcher in der Schleife erst später geprüft wird, bereits verwendet wird.


Es ist doch wohl völlig klar, dass bereits bestehende Namen zuvor in das Array geladen werden müssen, oder?

Zitat Um dies zu verhindern wurde in der folgenden Version eine Prüfung eingebaut, ob ein Hyperlink mit dem ermittelten Namen bereits existiert oder eine Umbenennung überhaupt notwendig ist (der ermittelte neue Name entspricht dem ursprünglichen Namen).


Das wäre ein sehr zeitintensives Verfahren.

Richtig ist:

1. Namen aller bestehenden Hyperlinks laden
1.1 den ersten vorkommenden Namen in das Buchführungsarray laden, für jeden weiteren Namen mit Zähler den Zähler im Array hochzählen.

Danach erst weitere Hyperlinks erzeugen und Namen zuweisen.

Danach, wie von mir beschrieben, vorgehen.

Martin, noch eine Ergänzung:

Ich würde mir die Mühe der Prüfung überhaupt nicht machen, sondern einfach komplett alle Hyperlinks nach den vorgegeben Regeln neu benennen.


als Antwort auf: [#483494]
(Dieser Beitrag wurde von WernerPerplies am 1. Nov 2011, 10:00 geändert)
X

Aktuell

InDesign / Illustrator
ScreenShot 274 Warum Templates in InDesign benutzen_ - Satzkiste in Stuttgart - Satz und technische Umsetzung - Google Chrome (300x300 HilfDirSelbst)

Veranstaltungskalender

Hier können Sie Ihre Anlässe eintragen, welche einen Zusammenhang mit den Angeboten von HilfDirSelbst.ch wie z.B. Adobe InDesign, Photoshop, Illustrator, PDF, Pitstop, Affinity, Marketing, SEO, Büro- und Rechtsthemen etc. haben. Die Einträge werden moderiert freigeschaltet. Dies wird werktags üblicherweise innert 24 Stunden erfolgen.

pdf-icon Hier eine kleine Anleitung hinsichtlich Bedeutung der auszufüllenden Formularfelder.

Veranstaltungen
02.02.2023

Prozesse optimieren und effizient gestalten

Zürich
Donnerstag, 02. Feb. 2023, 08.00 - 10.00 Uhr

Digitalisierung, Webauftritt

Digitalisierung mitgestalten - Worauf kommt es an? Wie wichtig ist die Webseite? Webseite mit Word Press? Interne Prozesse optimieren

Ja

Organisator: B. Isik - SNF Academy

Kontaktinformation: Birol Isik, E-Mailinfo AT bkcc DOT ch

https://digitalisierung-heute.ch/digitalisierung-informationstag-schweiz/

Veranstaltungen
01.03.2023 - 09.03.2023

Online
Mittwoch, 01. März 2023, 00.00 Uhr - Donnerstag, 09. März 2023, 00.00 Uhr

Online Webinar

Wie gehen wir mit diesen Veränderungen um? Was ist notwendig, damit wir die Digitalisierung im Unternehmen klappt? Veränderungsprozesse verstehen und entsprechend handeln Mitarbeiter als Botschafter Webseite mit WordPress erstellen SEA /SEO (Ads aufschalten)

Ja

Organisator: B. Isik - SNF Academy

Kontaktinformation: B. Isik, E-Mailinfo AT snfa DOT ch

https://www.fernstudiumfitness.ch/digitalisierung-schweiz/