Default Value in einer Webform / Custom Search Box
Eingetragen von empoint (127)
am 23.06.2009 - 17:41 Uhr in
am 23.06.2009 - 17:41 Uhr in
Hallo!
Ich möchte, dass wenn man in eine Textarea bzw in ein InputFeld klickt, der DefaultValue (Standartwert ;) ) verschwindet, dieser aber beim Klick außerhalb des Formularfeldes wieder erscheint.
Im Modul Custom Search Box ist es so gelöst:
onblur="if (this.value == '') {this.value = 'DEFAULT';}" onfocus="if (this.value == 'DEFAULT') {this.value = '';}"
Jemand eine Idee wo man diesen Code hinzufügen muss?
Vielen Dank!
- Anmelden oder Registrieren um Kommentare zu schreiben
hook_form_alter
am 23.06.2009 - 21:23 Uhr
onblur="if (this.value == '') {this.value = 'DEFAULT';}" onfocus="if (this.value == 'DEFAULT') {this.value = '';}"
Jemand eine Idee wo man diesen Code hinzufügen muss?
In der Implementierung von
hook_form_alter()
des Moduls das du dafür schreiben musst.--
tut mir leid ...
am 24.06.2009 - 08:01 Uhr
aber für mich sind da böhmische dörfer ... ich habe zu erst gedacht ich könnte mit der form.inc arbeiten?
dies scheint aber wohl nicht der fall zu sein - deinen link habe ich mir angeguckt, verstehe aber nur bahnhof!
möchte doch einfach nur diese funktion oben ausführen und anstatt DEFAULT soll die default value Variable rein... die meines erachtens nach diese hier sein müsste: "$element['#value']"
Gibts niemanden der sowas schon realisiert hat?
form_alter
am 24.06.2009 - 08:39 Uhr
Moin.
aber für mich sind da böhmische dörfer
Dann wird es höchste Zeit, sich mit dem Thema zu befassen. :-)
... ich habe zu erst gedacht ich könnte mit der form.inc arbeiten?
Finger weg vom Drupal-Kern! Änderungen, die da gemacht werden, führen häufig zu Fehlern (vor allem, wenn man überhaupt nicht weiss, was man eigentlich tut) und sind nach dem nächsten Update auch wieder weg.
möchte doch einfach nur diese funktion oben ausführen und anstatt DEFAULT soll die default value Variable rein... die meines erachtens nach diese hier sein müsste: "$element['#value']"
Ja, der Ansatz ist schonmal richtig.
Du musst Dir ein kleines Modul schreiben, dort hook_form_alter (bzw. hook_form_FORM_ID_alter implementieren und somit die Änderungen an den gewünschten Formularen durchführen.
hth,
Stefan
--
sei nett zu Deinem Themer
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
Danke schonmal dass du mir
am 24.06.2009 - 09:00 Uhr
Danke schonmal dass du mir dabei hilft, also ich habe jetzt mal was in PHP geschrieben wo ich mir sicher bin, dass es noch nicht klappt
<?php
function hook_form_alter(&$form, $form_state, $form_id){
switch ( $form_id ) {
case 'webform-client-form-53':
$form['text'] = array (
'#value' => $form['#build_id'],
'#attributes' => array(
'onblur' => 'if (this.value == '') {this.value = '$element['#value']';}',
'onfocus' => 'if (this.value == '$element['#value']') {this.value = '';}'),
onblur="'" onfocus=""),
);
break;
}
}
?>
Das Formular hat die id "webform-client-form-53"
Ich denke jetzt werden erstmal 1000e Fehler gefunden richtig ;) ?
form_alter
am 24.06.2009 - 09:27 Uhr
Ich denke jetzt werden erstmal 1000e Fehler gefunden richtig ;) ?
Nö, soviele sind das gar nicht. :-)
Und zwar musst Du im Funktionsnamen anstelle von "hook" den Namen Deines Moduls schreiben. Sollte Dein Modul also "setdefaultvalue" heissen (die Moduldatei also setdefaultvalue.module, so musst Du diese Funktion logischerweise
setdefaultvalue_form_alter
benennen.Und dann solltest Du wirklich nur die Attribute des Elementes verändern, die Du wirklich verändern willst.
#value
auf die Build-Id des Formulars zu setzen führt zu einem Ergebnis, das Du bestimmt so nicht möchtest. Dadurch ist der Wert dieses Feldes nämlich immer die Build-Id des Formulars. Egal, was man in das Feld eingibt. Siehe dazu auch die Drupal 6 FormsAPI Referenz.Den Standardwert setzt Du über #default_value.
hth,
Stefan
--
sei nett zu Deinem Themer
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
ok ... bin also bisher hier angelangt :)
am 24.06.2009 - 09:54 Uhr
<?php
function setdefault_form_alter(&$form, $form_state, $form_id){
switch ( $form_id ) {
case 'webform-client-form-53':
$form['text'] = array (
'#attributes' => array(
'onblur' => 'if (this.value == '') {this.value = '$element['#value']';}',
'onfocus' => 'if (this.value == '$element['#value']') {this.value = '';}'),
);
break;
}
}
?>
Die Datei würde dann heißen setdefault.module
Würde nun gerne wissen ob die Schreibweise so korrekt ist und wie ich am Ende das Modul installieren ... ganz einfach über Verwalten / Module ? (würde dann noch ne setdefault.info schreiben .... oder wie funktioniert das?
Gruß
PS: Also ich bin schon soweit dass ich das in der form.inc ändern könnte ... der Code dafür würde dann wie folgt heißen:
$output .= '<input type="text"'. $maxlength .' name="'. $element['#name'] .'" id="'. $element['#id'] .'"'. $size .' value="'. check_plain($element['#value']) .'"'. drupal_attributes($element['#attributes']) .' onblur="if(this.value== \'\') {this.value = \''. check_plain($element['#value']) .'\';}" onfocus="if(this.value == \''. check_plain($element['#value']) .'\') {this.value = \'\';}" />';
Aber wie du schon sagtest wäre es als Modul natürlich eleganter ... doch leider hapert es bei mir an der Schreibweise :-/
Writing .info files (Drupal 6.x)
am 24.06.2009 - 10:09 Uhr
Writing .info files (Drupal 6.x)
Beispiel:
name = setdefault
description = Sets the default value of
core = 6.x
dependencies[] = webforms
--
nein hat sich nicht erledigt
am 24.06.2009 - 10:06 Uhr
nein hat sich nicht erledigt ... das thema hier ist die erstellung eines moduls und nicht die änderung im core...
Modul
am 24.06.2009 - 10:08 Uhr
...und wie ich am Ende das Modul installieren ... ganz einfach über Verwalten / Module ? (würde dann noch ne setdefault.info schreiben .... oder wie funktioniert das?
Ja. Wie oben bereits erwähnt (einfach mal auf die von mir geposteten Links klicken).
PS: Also ich bin schon soweit dass ich das in der form.inc ändern könnte
Warum zum Teufel ändern immer alle gleich im Drupal-Kern?
Schraubst Du auch am Motor Deines Autos herum? Oder tauscht einfach mal wild ein paar Kondensatoren in Deinem Fernseher aus, damit er FullHD kann? Nicht wirklich, oder!?
Aber wie du schon sagtest wäre es als Modul natürlich eleganter
Es ist nicht eleganter, sondern die Lösung.
hth,
Stefan
--
sei nett zu Deinem Themer
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
Re: nein hat sich nicht erledigt
am 24.06.2009 - 10:17 Uhr
nein hat sich nicht erledigt ... das thema hier ist die erstellung eines moduls und nicht die änderung im core...
Habe ich dann auch gelesen. Deshalb habe ich meine Nachricht entsprechend angepasst. Leider warst du mit deinem Kommentar etwas schneller, so das das Kommentar jetzt irgendwie luftleer im Raum zu hängen scheint :-)
EDIT: Hab noch ein paar Fehler in deiner Funktion gefunden
<?php
function setdefault_form_alter(&$form, $form_state, $form_id){
switch ( $form_id ) {
case 'webform-client-form-53':
$form['text']['#attributes']['onblur'] = "if (this.value == '') {this.value = '$form[text][#default_value]';}";
$form['text']['#attributes']['onfocus'] = "if (this.value == '$form[text][#default_value]') {this.value = '';}";
break;
}
}
?>
--
hehe macht ja nichts :) also
am 24.06.2009 - 10:20 Uhr
also hab jetzt mal die Änderung getestet klappt leider nicht :-/ *grml* kann man einstellen dass der das nicht nur für ein Form macht sondern für alle?
Gruß
Array in Strings
am 24.06.2009 - 10:30 Uhr
Ich würde es eher so machen (ist sicherer):
<?php
function setdefault_form_alter(&$form, $form_state, $form_id){
switch ( $form_id ) {
case 'webform-client-form-53':
$form['text']['#attributes']['onblur'] = 'if (this.value == "") {this.value = "'. $form['text']['#default_value'] .'";}';
$form['text']['#attributes']['onfocus'] = 'if (this.value == "'. $form['text']['#default_value'] .'") {this.value = "";}';
break;
}
}
?>
Stefan
--
sei nett zu Deinem Themer
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
habe das ganze jetzt mal
am 24.06.2009 - 10:49 Uhr
habe das ganze jetzt mal ausprobiert ... das modul so geschrieben wie gesagt ... doch leider tut sich da nix ... habe nochmal nen Auszug aus dem Quellcode rausgekramt:
<h2><a href="#">Gedankenblitz</a></h2>
<div class="content"><a name="gedankenblitz"></a><div id="node-53" class="node clear-block">
<h2><a href="/gedankenblitz" title=""></a></h2>
<div class="content">
<span class='print-link'></span><form action="/gedankenblitz#gedankenblitz" accept-charset="UTF-8" method="post" id="webform-client-form-53-1" class="webform-client-form" enctype="multipart/form-data">
<div><div class="webform-component-textfield" id="webform-component-name"><div class="form-item" id="edit-submitted-name-1-wrapper">
<label for="edit-submitted-name-1">Name: </label>
<input type="text" maxlength="128" name="submitted[name]" id="edit-submitted-name-1" size="20" value="Name" class="form-text" />
und das Modul sieht wie folgt aus:
<?php
function setdefault_form_alter(&$form, $form_state, $form_id){
switch ( $form_id ) {
case 'webform-client-form-53-1':
$form['text']['#attributes']['onblur'] = 'if (this.value == "") {this.value = "'. $form['text']['#default_value'] .'";}';
$form['text']['#attributes']['onfocus'] = 'if (this.value == "'. $form['text']['#default_value'] .'") {this.value = "";}';
break;
}
}
?>
Muss ich evtl. den ganzen Kram irgendwie durch ein anderes Modul aktivieren oder so? Habe das erstellte Modul lediglich installiert..
Modul
am 24.06.2009 - 10:56 Uhr
Mach mal Folgendes:
<?php
function setdefault_form_alter(&$form, $form_state, $form_id){
drupal_set_message('Id: "'. $form_id .'"');
switch ( $form_id ) {
case 'webform-client-form-53-1':
$form['text']['#attributes']['onblur'] = 'if (this.value == "") {this.value = "'. $form['text']['#default_value'] .'";}';
$form['text']['#attributes']['onfocus'] = 'if (this.value == "'. $form['text']['#default_value'] .'") {this.value = "";}';
break;
}
}
?>
Dann geh mal auf die Seite mit dem Formular und schau, was da für Formular-Ids angezeigt werden. So siehst Du die interne Id des Formulars (ich tippe nämlich mal ganz stark auf "webform_client_form_53_1").
Muss ich evtl. den ganzen Kram irgendwie durch ein anderes Modul aktivieren oder so? Habe das erstellte Modul lediglich installiert..
Über admin/build/modules? Dann ist Dein Modul aktiv.
hth,
Stefan
--
sei nett zu Deinem Themer
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
Ja hattest recht die ID ist:
am 24.06.2009 - 11:16 Uhr
Ja hattest recht die ID ist: webform_client_form_53
Aber trotz dieser Änderung:
<?php
function setdefault_form_alter(&$form, $form_state, $form_id){
drupal_set_message('Id: "'. $form_id .'"');
switch ( $form_id ) {
case 'webform_client_form_53':
$form['text']['#attributes']['onblur'] = 'if (this.value == "") {this.value = "'. $form['text']['#default_value'] .'";}';
$form['text']['#attributes']['onfocus'] = 'if (this.value == "'. $form['text']['#default_value'] .'") {this.value = "";}';
break;
}
}
klappt es einfach nicht :-/
keiner von euch beiden mehr
am 24.06.2009 - 14:00 Uhr
keiner von euch beiden mehr ne idee? :( hab das gefühl das wir kurz davor sind..
edit* habe gerade gelesen, dass es so wohl nicht funktionieren kann man müsste es mit jQuery lösen und diese funktion nutzen: drupal_add_js()
Was sagt ihr?
Drupal.behaviors.restoreTextf
am 24.06.2009 - 15:32 Uhr
Drupal.behaviors.restoreTextfieldDefaults = function(context) {
$(context).find(':text:not(.restoreTextfieldDefaults-processed)').each(function() {
$(this).data('defaultValue',$(this).val())
.focus(function() { if ($(this).val() == $(this).data('defaultValue')) { $(this).val(''); } })
.blur(function() { if ($(this).val() == '')) { $(this).val($(this).data('defaultValue')); } });
}).addClass('restoreTextfieldDefaults-processed');
};
Hab nun den Code hier her im Zusammenhang mit drupal_add_js .. kann mir nun einer weiter helfen bezüglich der Anpassung auf meine Gegebenheiten?
Wäre euch super dankbar
also ich habe das Thema
am 21.07.2009 - 07:14 Uhr
also ich habe das Thema letztens auf Eis gelegt weil ich einfach nicht weitergekommen war ... nun ist es aber jedoch wieder aktuell und leider bisher noch keine Lösung.
Ich weiß nicht ob ich ein ganzes Stück weiter bin - vielleicht können mir das hier ein paar "developer cracks" mitteilen...
Ich habe eine JS Datei erstellt mit dem Namen "test.js" diese Datei liegt im Webform Ordner und deren Code ist:
Drupal.behaviors.restoreTextfieldDefaults = function(context) {
$(context).find(':text:not(.restoreTextfieldDefaults-processed)').each(function() {
$(this).data('defaultValue',$(this).val())
.focus(function() { if ($(this).val() == $(this).data('defaultValue')) { $(this).val(''); } })
.blur(function() { if ($(this).val() == '')) { $(this).val($(this).data('defaultValue')); } });
}).addClass('restoreTextfieldDefaults-processed');
};
Anschließend bin ich hingegangen und habe folgende Zeilen in die "webform.module" Datei geschrieben:
<?php
function webform_form_alter(&$form, $form_state, $form_id) {
drupal_add_js('test.js','module','header',false,true,false);
}
?>
Nur leider klappt die ganze Geschichte nicht so wie ich es mir vorstelle - hat hier vielleicht jemand eine Lösung für mich oder ist daran interessiert mit mir zusammen die ganze Geschichte zu lösen?