Werte beim Speichern in ein anderes Feld schreiben
Veröffentlichungsdatum: 07. Juli 2016
Änderungsdatum: 05. Januar 2021
weblication cms onBeforeSave speichern wert anderes feld title titel beschreibung überschrift
Dieser Artikel beschreibt, wie Sie Werte eines Feldes beim Speichern der Datei in ein anderes Feld schreiben.
Sofern Sie Werte, die der Benutzer z.B. über die Metadaten pflegt auch in andere Elemente schreiben wollen, können Sie dies direkt über die Metadaten-Maske realisieren.
Beispiel 1: Titel über Objekt pflegen und in wd:title schreiben
Ein Benutzer pflegt so z.B. den Titel einer Datei über ein Objekt (z.B. wd:data id="title"). Dieser Wert wird dann beim Speichern der Datei über die Javascript-Funktion "wOnBeforeSave" zusätzlich in den Titel der Datei (wd:title) geschrieben. Nehmen Sie dies einfach im schon bestehenden JS-Block der BASE Projektbasis innerhalb der Funktion "wOnBeforeSave" auf (siehe Beispiel unten).
Beispiel 1: Auszug aus der standard.metadata.php zur Titel-Pflege über Objekt
... <xsl:choose> <xsl:when test="/wd:document/wd:extension/wd:object/@type = 'event' and /wd:document/wd:extension/wd:object/wd:data[@id='title']"> <div class="wEditorExtensionLabel" style="display:none">Titel <span>(wird über die Objekte gepflegt)</span></div> <div class="wEditorExtensionValue" style="display:none"> <!--web:text:start editor="input" inputStyle="width:100%;" validator="required" errorMessage=""--><xsl:value-of select="/wd:document/wd:extension/wd:meta/wd:title/text()"/><!--web:text:stop--> </div> </xsl:when> <xsl:otherwise> <div class="wEditorExtensionLabel">Titel* <span>(wird über die Objekte gepflegt)</span></div> <div class="wEditorExtensionValue"> <!--web:text:start editor="input" inputStyle="width:100%;" validator="required" errorMessage=""--><xsl:value-of select="/wd:document/wd:extension/wd:meta/wd:title/text()"/><!--web:text:stop--> </div> </xsl:otherwise> </xsl:choose> ... ... <script type="text/javascript"> //... function wOnBeforeSave(){ var titleId = 'webtag_text_<xsl:value-of select="/wd:document/wd:extension/wd:meta/wd:title/@wEditorId"/>'; var titleObjectId = 'webtag_text_<xsl:value-of select="/wd:document/wd:extension/wd:object/wd:data[@id = 'title']/@wEditorId"/>'; wDocument.element(titleId).value = wDocument.element(titleObjectId).value; return true; //... } </script>
Achten Sie darauf, dass alle hier angegebenen Felder als Input-Feld (also Text-Pflegekommentar) in der Seitenbearbeitung vorhanden sind! Damit der Pflegebenutzer nur das Pflegefeld sieht, über das er den Text einpflegen soll, blenden Sie das zusätzlich zu schreibende Feld aus (z.B. display:none).
Beispiel 2: Nicht ausgefüllte Beschreibung zieht Inhalt aus erster Überschrift
Dieser Anwendungsfall beschreibt, wie Sie sicherstellen können, daß die Beschreibung (wd:description) auch dann ausgefüllt wird, wenn der Redakteur des Feld leer lässt.
Über JavaScript wird beim Speichern der Inhalt des ersten Überschriften-Elementes in die Beschreibung (wd:description) übernommen, sofern das Beschreibungsfeld nicht befüllt ist.
Beispiel 2: Auszug aus der standard.metadata.php zur Übernahme der Beschreibung aus der ersten Überschrift
... <script type="text/javascript"> //... function wOnBeforeSave(){ elementDescriptionTextarea = wDocument.element('#webtag_text_<xsl:value-of select="/wd:document/wd:extension/wd:meta/wd:description/@wEditorId"/>'); if(elementDescriptionTextarea){ if(elementDescriptionTextarea.value == ''){ firstHeadlineInput = wDocument.element('input.h1Editor, input.h2Editor'); if(firstHeadlineInput){ elementDescriptionTextarea.value = firstHeadlineInput.value; } } } //... } </script>
Weiterführende Links
- Wie kann ich Werte eines Feldes beim Speichern in ein anderes Feld schreiben?
- Der Artikel beschreibt, dass Sie die Funktion <code class="codeInline">wOnBeforeSave</code> verwenden. Darin können Sie beim Speichern den Wert eines Quellfeldes auslesen und in ein Zielfeld (z.B. <code class="codeInline">wd:title</code> oder <code class="codeInline">wd:description</code>) schreiben. Ergänzen Sie den entsprechenden Code in den bereits bestehenden JavaScript-Block innerhalb von <code class="codeInline">wOnBeforeSave</code>.
- Wie kann ich den Titel, den der Benutzer über ein Objekt pflegt, zusätzlich in <code class="codeInline">wd:title</code> schreiben?
- Wenn der Benutzer den Titel über ein Objekt pflegt (z.B. <code class="codeInline">wd:data id="title"</code>), dann können Sie den gepflegten Wert beim Speichern in den Titel der Datei <code class="codeInline">wd:title</code> übernehmen. Dazu fügen Sie in <code class="codeInline">wOnBeforeSave</code> Code hinzu, der den Inhalt des Objekt-Feldes in das Element mit der <code class="codeInline">wd:title</code>-ID schreibt (Beispiel aus dem Artikel: <code class="codeInline">wDocument.element(titleId).value = wDocument.element(titleObjectId).value;</code>).
- Was muss ich bei der Implementierung der Titel-Pflege beachten?
- Achten Sie darauf, dass alle in der Logik verwendeten Felder als Input-Felder (z.B. Text-Pflegekommentar) in der Seitenbearbeitung vorhanden sind. Damit der Benutzer nur das Pflegefeld sieht, das er befüllen soll, sollten Sie das zusätzlich zu schreibende Zielfeld ausblenden, z.B. mit <code class="codeInline">display:none</code>.
- Wie funktioniert das automatische Befüllen von <code class="codeInline">wd:description</code>, wenn der Redakteur keine Beschreibung eingibt?
- Über JavaScript in <code class="codeInline">wOnBeforeSave</code> wird beim Speichern geprüft, ob das Beschreibungsfeld <code class="codeInline">wd:description</code> leer ist. Wenn es leer bleibt, wird stattdessen der Inhalt des ersten Überschriften-Elements (z.B. <code class="codeInline">input.h1Editor</code> oder <code class="codeInline">input.h2Editor</code>) in <code class="codeInline">wd:description</code> übernommen.
- Welche Logik wird im Beispiel zur Beschreibungskopie verwendet?
- Im Beispiel wird in <code class="codeInline">wOnBeforeSave</code> das Textarea-Element für die Beschreibung ermittelt. Wenn <code class="codeInline">elementDescriptionTextarea.value == ''</code> gilt, wird als Quelle der Wert des ersten Überschriften-Inputs gesucht (z.B. <code class="codeInline">wDocument.element('input.h1Editor, input.h2Editor')</code>). Falls ein solches Element gefunden wird, wird dessen Inhalt in das Beschreibungsfeld geschrieben.
- Wo sollte ich den benötigten JavaScript-Code einfügen?
- In den bestehenden JavaScript-Block der Projektbasis innerhalb der Funktion <code class="codeInline">wOnBeforeSave</code>. Dort können Sie sowohl den Titel-Transfer (Objektwert → <code class="codeInline">wd:title</code>) als auch die Beschreibungskopie (leeres <code class="codeInline">wd:description</code> → erster Headline-Wert) ergänzen.