meetnow-mw
I'm new here

DOM Elemente Inhalte kopieren - Links übernehemen

Hallo,

wir durchlaufen in der englischen Sprache alle Textelemente und wollen dabei die Inhalte in die anderen Sprachen übernehmen.

Speichern wir die bearbeiteten Texte in das DOM Element der jeweiligen Sprache, so werden Links nicht übernommen und sind leer.

Hier der Codeausschnitt:

// ...

DomElement dom = (DomElement) field.get();

String transValue = dom.toText(true);

transValue = transValue.replaceAll(...);

((DomElement) transField.get()).parseHtml(transValue);

// ...

Wie können hierbei die Links korrekt übernommen werden?

Zur Info:

FirstSpirit Version 5.2.1102.76149

Vielen Dank und Grüße,

Matthias

0 Kudos
2 Replies
NMc
Crownpeak employee
Crownpeak employee

Hallo Matthias,

Ich will mal versuchen deine Frage zu beantworten...

Die Zeile:

((DomElement) transField.get()).parseHtml(transValue);

kann so nicht funktionieren. parseHtml ersetzt nicht HTML Tags durch passenden TemplateCode.

Beispiel: Ein <a href=... > wird nicht durch ein passendes Linktemplate ersetzt.

Eine derartige Implementierung wäre sehr fehleranfällig und komplex.

In einem CMS_INPUT_DOM wird der Inhalt als DomElement gespeichtert, das ist ein eigener Datentyp von FS.

Dieser enthält DomNodes, das sind Formatvorlagen die als Absatz fungieren (Standard ist p).

Die DomNodes können beliebig geschachtelt sein und zusätzlich LinkTemplates enthalten (die wiederum ein eigenes FormData haben).

Es ist möglich aus dem FormData der Section, Dataset, whatever das DomElement auszulesen und in einen anderen zu kopieren.

Beispiel:

final Project project = this.getProject(context, projectId);

final Language lang = project.getMasterLanguage();

final FormData formData = dataset.getFormData();

final FormField<DomElement> domEditorFF = (FormField<DomElement>) formData.get(lang, "DOM_INPUT_VARIABLE");

DomElement dom = domEditorFF.get();

Wenn Manipulationen vorgenommen werden sollen, oder die Formatvorlagen nicht gleich sind, dann muss man durch alle DomNodes gehen und diese anpassen.

Beispiel:

DefaultDomNode rootDom = dom.getRoot();

//clear Dom

for (DomNode domNode : rootDom.getChildren()) {

   rootDom.removeChild(domNode);

}

Um ein Formattemplate hinzuzufügen, weil man z.B. HTML importiert, geht das so

FormatTemplate p = (FormatTemplate) storeElementAgent.loadStoreElement("p", IDProvider.UidType.TEMPLATESTORE_FORMATTEMPLATE, false);

DefaultDomNode pNode = (DefaultDomNode) rootDom.appendChild(p);

pNode.appendChild(String "My text");    

Wenn da mehr rein soll, können hier auch andere DomNodes oder LinkTemplates angehängt werden.   

Reines HTML oder reinen Text kann ich nicht in einen DomEditor Speichern.

Mit freundlichem Gruß

Nico

0 Kudos
marro
Crownpeak employee

Hallo Matthias,

benötigst Du noch weitere Hilfe oder hat Dir die Antwort von Nicolai bereits geholfen?

In diesem Fall wäre es super, wenn Du die "richtige Antwort" entsprechend markierst, damit auch andere

Community-Teilnehmer diese auf den ersten Blick finden. Solltest Du zwischenzeitlich eine eigene Lösung

gefunden haben, wäre es nett, wenn Du diese hier bereitstellst.

Viele Grüße

Donato

0 Kudos