Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Allgemeines zu Drupal ›

Default Value in einer Webform / Custom Search Box

Eingetragen von empoint (127)
am 23.06.2009 - 17:41 Uhr in
  • Allgemeines zu Drupal
  • Drupal 6.x

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!

‹ [teils gelöst] Taxonomiepunkte vom Benutzer ergänzen lassen In Drupal ein Verzeichnis mit php Dateien einbinden ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

hook_form_alter

Eingetragen von traxer (1009)
am 23.06.2009 - 21:23 Uhr
empoint schrieb

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.

--
XING

  • Anmelden oder Registrieren um Kommentare zu schreiben

tut mir leid ...

Eingetragen von empoint (127)
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?

  • Anmelden oder Registrieren um Kommentare zu schreiben

form_alter

Eingetragen von stBorchert (6003)
am 24.06.2009 - 08:39 Uhr

Moin.

empoint schrieb

aber für mich sind da böhmische dörfer

Dann wird es höchste Zeit, sich mit dem Thema zu befassen. :-)

empoint schrieb

... 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.

empoint schrieb

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

  • Anmelden oder Registrieren um Kommentare zu schreiben

Danke schonmal dass du mir

Eingetragen von empoint (127)
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 ;) ?

  • Anmelden oder Registrieren um Kommentare zu schreiben

form_alter

Eingetragen von stBorchert (6003)
am 24.06.2009 - 09:27 Uhr
empoint schrieb

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

  • Anmelden oder Registrieren um Kommentare zu schreiben

ok ... bin also bisher hier angelangt :)

Eingetragen von empoint (127)
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 :-/

  • Anmelden oder Registrieren um Kommentare zu schreiben

Writing .info files (Drupal 6.x)

Eingetragen von traxer (1009)
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

--
XING

  • Anmelden oder Registrieren um Kommentare zu schreiben

nein hat sich nicht erledigt

Eingetragen von empoint (127)
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...

  • Anmelden oder Registrieren um Kommentare zu schreiben

Modul

Eingetragen von stBorchert (6003)
am 24.06.2009 - 10:08 Uhr
empoint schrieb

...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).

empoint schrieb

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!?

empoint schrieb

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

  • Anmelden oder Registrieren um Kommentare zu schreiben

Re: nein hat sich nicht erledigt

Eingetragen von traxer (1009)
am 24.06.2009 - 10:17 Uhr
empoint schrieb

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;
  }
}
?>

--
XING

  • Anmelden oder Registrieren um Kommentare zu schreiben

hehe macht ja nichts :) also

Eingetragen von empoint (127)
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ß

  • Anmelden oder Registrieren um Kommentare zu schreiben

Array in Strings

Eingetragen von stBorchert (6003)
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

  • Anmelden oder Registrieren um Kommentare zu schreiben

habe das ganze jetzt mal

Eingetragen von empoint (127)
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..

  • Anmelden oder Registrieren um Kommentare zu schreiben

Modul

Eingetragen von stBorchert (6003)
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").

empoint schrieb

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

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ja hattest recht die ID ist:

Eingetragen von empoint (127)
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 :-/

  • Anmelden oder Registrieren um Kommentare zu schreiben

keiner von euch beiden mehr

Eingetragen von empoint (127)
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?

  • Anmelden oder Registrieren um Kommentare zu schreiben

Drupal.behaviors.restoreTextf

Eingetragen von empoint (127)
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

  • Anmelden oder Registrieren um Kommentare zu schreiben

also ich habe das Thema

Eingetragen von empoint (127)
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?

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
  • Wie erlaubt man neuen Benutzern auf die Resetseite zugreifen zu dürfen.
  • [gelöst] Anzeigeformat Text mit Bild in einem Artikel, Drupal 11
  • Social Media Buttons um Insteragram erweitern
  • Nach Installation der neuesten D10-Version kein Zugriff auf Website
  • Composer nach Umzug
  • [gelöst] Taxonomie Begriffe zeigt nicht alle Nodes an
  • Drupal 11 + Experience Builder (Canvas) + Layout Builder
  • Welche KI verwendet ihr?
  • Update Manger läst sich nicht Installieren
Weiter

Neue Kommentare

  • melde mich mal wieder, da ich
    vor 1 Woche 4 Tagen
  • Hey danke
    vor 1 Woche 5 Tagen
  • Update: jetzt gibt's ein
    vor 1 Woche 6 Tagen
  • Hallo, im Prinzip habe ich
    vor 2 Wochen 3 Tagen
  • Da scheint die Terminologie
    vor 2 Wochen 3 Tagen
  • Kannst doch auch alles direkt
    vor 3 Wochen 21 Stunden
  • In der entsprechenden View
    vor 3 Wochen 21 Stunden
  • Dazu müsstest Du vermutlich
    vor 3 Wochen 21 Stunden
  • gelöst
    vor 5 Wochen 4 Tagen
  • Ja natürlich. Dass ist etwas,
    vor 5 Wochen 5 Tagen

Statistik

Beiträge im Forum: 250233
Registrierte User: 20451

Neue User:

  • ByteScrapers
  • Mroppoofpaync
  • 4aficiona2

» Alle User anzeigen

User nach Punkten sortiert:
wla9461
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 1 Benutzer und 22 Gäste online.

Benutzer online

  • ian_radnor

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association