Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Anfängerfragen ›

Profilfeld: Auswahl erzwingen bei 'Listenauswahlfeld'

Eingetragen von LiLiConsult (4)
am 08.04.2009 - 04:17 Uhr in
  • Anfängerfragen
  • Drupal 6.x

Hallo @all,

bei meiner Prüfung, ob Drupal für meine Aufgabe die richtige Lösung ist, bin ich im Moment beim Benutzerprofil angekommen.

Ich habe ein neues Feld angelegt und will es aus einer Auswahlliste füllen lassen. Inhaltlich korrekte Antworten wären

Antwort 1
Antwort 2
Antwort 3.

Nun will ich den User zwingen, eine Antwort zu geben. Es ist mir klar, dass ich ihn nicht zwingen kann, eine ehrliche Antwort zu geben, aber ich will es ihm nicht zu einfach machen und deshalb die Möglichkeit nehmen, einfach den ersten Eintrag stehen zu lassen. Also füge ich vor die erste sinnvolle Antwort 'bitte auswählen' ein. Damit sieht meine Auswahlliste wie folgt aus:

bitte auswählen
Antwort 1
Antwort 2
Antwort 3

Wie schaffe ich es nun, dass beim Speichern nur Antworten akzeptiert werden, die ungleich 'bitte auswählen' sind ?

Oder gibt es für diese Aufgabe eine bessere Lösung ?

Danke für jede konstruktive Antwort.

Gruß
Wolfgang

‹ LinkToContent und FCKeditor [gelöst] große Datenmenge einbinden / mit Views filtern ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Minimodul und validate()

Eingetragen von stBorchert (6003)
am 08.04.2009 - 08:27 Uhr

Moin!
Das kannst Du erreichen, indem Du der Auswahlliste eine eigene Validierungsfunktion hinzufügst.
Das klingt vielleicht ersteinmal seltsam, ist jedoch eigentlich gar nicht so schwierig.
Dafür erstellst Du Dir ein Minimodul mit unten stehendem Inhalt.
Die Id des Formulars bekommst Du heraus, indem Du Dir (z.B. mit firebug) den HTML-Quelltext der Seite anschaust und in der Id des <form> Elements einfach "-" durch "_" ersetzt (z.B. "comment-form" wird zu "comment_form").

<?php
function mymodule_form_FORMID_alter(&$form, &$form_state) {
 
$form['my_select_list']['#validate']['mymodule_validate'] = array();
}
 
function
mymodule_validate($element) {
  if (
$element['#value'] == t('please select')) {
   
form_set_error('my_select_list', t('Please select an answer from the list.'));
  }
}
?>

hth,

 Stefan

  • Anmelden oder Registrieren um Kommentare zu schreiben

Minimodul und validate()

Eingetragen von madmattus (41)
am 28.06.2009 - 09:51 Uhr

Hallo stBorchert,

ich habe ein Verständnisproblem was das Aufbereiten der Funktionen angeht, ich habe eine mini-module erstellt wie es beschrieben ist.

Wie muss ich jetzt die Funktion an meinen Gegebenheiten anpassen, also welche Werte muss ich mit eigenen Werten ersetzen?

<?php
function mymodule_form_FORMID_alter(&$form, &$form_state) { //soll ich hier meine FORMID dazwischen kopieren oder kommt nur die FORMID hier her?
 
$form['my_select_list']['#validate']['mymodule_validate'] = array(); // muss ich "my_select_list" mit dem Namen meiner Auswahlliste ersetzen?
}

function
mymodule_validate($element) {
  if (
$element['#value'] == t('please select')) {
   
form_set_error('my_select_list', t('Please select an answer from the list.'));
  }
}
?>

Gibt es auch einen andere Lösung für diese Problem?

Vielen Dank schon mal
Markus

  • Anmelden oder Registrieren um Kommentare zu schreiben

Formulare und hooks

Eingetragen von stBorchert (6003)
am 28.06.2009 - 10:00 Uhr

Moin.

madmattus schrieb

Wie muss ich jetzt die Funktion an meinen Gegebenheiten anpassen, also welche Werte muss ich mit eigenen Werten ersetzen?

Du musste "FORM_ID" (ich hatte einen Unterstrich vergessen) durch die entsprechende (interne) Id des Formulars ersetzen. Siehe dazu auch das API zu hook_form_FORM_ID_alter.

madmattus schrieb

// muss ich "my_select_list" mit dem Namen meiner Auswahlliste ersetzen?

Klar. Woher soll Drupal sonst wissen, für welches Element das gilt.

madmattus schrieb

Gibt es auch einen andere Lösung für diese Problem?

Ist mir nicht bekannt.

Auf lullabot gibt es ein kleines Tutorial zum Einsatz von hook_form_alter. Mit dieser Funktion kannst Du generell alle Formulare verändern (und bekommst gleich noch die FormularId mitgeliefert). hook_form_FORM_ID_alter ist speziell für ein Formular (und sieht m.E. sauberer im Code aus, wenn man die Änderungen wirklich nur auf ein Formular anwenden will).

hth,

 Stefan

--
sei nett zu Deinem Themer

  • Anmelden oder Registrieren um Kommentare zu schreiben

ja FORM_ID ist ein

Eingetragen von Tobias Bähr (4019)
am 28.06.2009 - 10:10 Uhr

ja FORM_ID ist ein Platzhalter für die eigentlich ID des Formulars. Und 2. auch da muss der Name der Auswahlliste hin, weil dies hier auch nur ein Beispiel ist.

Aber wenn ich mich nicht irre sollte das Mitteilen der Element-Überprüfung so aussehen.

<?php
function mymodule_form_FORMID_alter(&$form, &$form_state) {
 
$form['my_select_list']['#element_validate'][] = 'mymodule_validate';
}
function
mymodule_validate($element, $form_state) {
  if (
$element['#value'] == t('please select')) {
   
form_set_error('my_select_list', t('Please select an answer from the list.'));
  }
}
?>

----------------------------------------

http://tobiasbaehr.de/
Gelöste Forenbeiträge mit [gelöst] im Titel ergänzen
Ein Forum ist kein Ersatz für das www (Google.de).

  • Anmelden oder Registrieren um Kommentare zu schreiben

Formulare und hooks

Eingetragen von madmattus (41)
am 28.06.2009 - 10:59 Uhr

Hallo Stefan,

vielen Dank für deinen Antwort und Tipps.

Ich bin schon mal so weit, das wenn ich das Formular abspeicher, ich einen weißen Bildschirm bekomme :-) also irgend wo hängt das ganze gerade mitten in der Abfrage.

Komm auch nicht drauf wo es jetzt Probleme gibt, sieht wohl leichter aus wie es ist.

Ich möchte ja lediglich aus dem Mehrfachauswahlfeld ein Pflichtfeld machen im dem "Auswahl-Liste" nicht als Eintrag gewertet wird.

Na ich probier mal weiter mein Glück, für Hilfe bin ich Natürlich jederzeit offen :-)

Besten Gruß
Markus

  • Anmelden oder Registrieren um Kommentare zu schreiben

Warum stellst du in den

Eingetragen von Tobias Bähr (4019)
am 28.06.2009 - 11:05 Uhr

Warum stellst du in den Feldeinstellung nicht ein, dass es ein Pflichtfeld sein soll? Oder geht das bei Mehrfachauswahl nicht?

Mach mal bei deinen form_set_error dadrunter noch ein return '';

----------------------------------------

http://tobiasbaehr.de/
Gelöste Forenbeiträge mit [gelöst] im Titel ergänzen
Ein Forum ist kein Ersatz für das www (Google.de).

  • Anmelden oder Registrieren um Kommentare zu schreiben

Feldeinstellung

Eingetragen von madmattus (41)
am 28.06.2009 - 11:20 Uhr

Das Problem ist wie LiLiConsult es oben schon geschildert hat, man kann in der Feldeinstellung zwar ein Pflichtfeld draus machen aber wenn du z.B. in der Liste "Auswahl" als Platzhalter stehen hast wird dieser auch als Eingabe gezählt und so kommt kein Hinweis das z.B. ein Bundesland ausgewählt werden soll.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Wenn man ein Feld als

Eingetragen von Tobias Bähr (4019)
am 28.06.2009 - 11:24 Uhr

Wenn man ein Feld als Pflichtfeld setzt dann brauch man doch nicht "bitte auswählen" hinzufügen, dass macht doch dann CCK.

----------------------------------------

http://tobiasbaehr.de/
Gelöste Forenbeiträge mit [gelöst] im Titel ergänzen
Ein Forum ist kein Ersatz für das www (Google.de).

  • Anmelden oder Registrieren um Kommentare zu schreiben

Also ich lege ein

Eingetragen von madmattus (41)
am 28.06.2009 - 11:35 Uhr

Also ich lege ein "Listenauswahlfeld" unter Profile an in dem ich z.B. alle Bundesländer anlege. Jetzt möchtet ich das der User in seinem Profil ein Bundesland auswählen muss. Wenn ich jetzt in der Option des Auswahfeldes "Der Benutzer muss einen Wert eingeben." einstelle sollte man meinen das alles seine Richtigkeit hat. Bei einem normalen Texfeld funktioniert es ja auch.

Aber hier ist jetzt das Problem, es wird nicht automatisch ein "Bitte Auswählen" in die Auswahlbox gesetzt sondern das z.B. erste Bundesland wird angezeigt. Und wenn ein User jetzt diese Feld nicht beachtet wir er auch nicht darauf Aufmerksam gemacht da der erste Wert als Ausgewählt behandelt wird.

Oder mach ich da was falsch?

  • Anmelden oder Registrieren um Kommentare zu schreiben

Aso ok, dachte du meinst

Eingetragen von Tobias Bähr (4019)
am 28.06.2009 - 12:01 Uhr

Aso ok, dachte du meinst CCK. Dann musste dich via minimodul einklinken.

<?php
function mymodule_validate($element, $form_state) {
  if (
$element['#value'] == t('please select')) {
   
form_set_error('my_select_list', t('Please select an answer from the list.'));
    return
'';
  }
} 
?>

Hier würde ich das return noch hinzufügen.

----------------------------------------

http://tobiasbaehr.de/
Gelöste Forenbeiträge mit [gelöst] im Titel ergänzen
Ein Forum ist kein Ersatz für das www (Google.de).

  • Anmelden oder Registrieren um Kommentare zu schreiben

Danke für eure Hilfe,

Eingetragen von madmattus (41)
am 28.06.2009 - 17:41 Uhr

Danke für eure Hilfe, leider habe ich es immer noch nicht hin bekommen. Schon bei der aktivierung des mini-modules und wenn ich das Formular abschicke erhalte ich eine weiße Seite die keinen Quellcode enthält.
Ich weiß nicht wo mein Fehler liegt, ich habe die Funktion so angepasst wie ich es verstanden habe.

Ermitteln der FROM_ID, im HTML Tag:
<form id="user-profile-form">

hier kopiere ich die ID heraus und tausche "-" gegen "_"

Ergebnis: user_profile_form

Ermittele den Namens der Auswahlliste:
unter Benutzerverwaltung > Profile im Spalt Name entnehme ich den Namen.

In meinem Fall "profile_bundesland".

Anpassen des Quellcodes:

" mymodule_form_FORM_ID_alter"

wird dann zu

" mymodule_form_user_profile_form_alter "

und

$form['my_select_list']

wird zu

$form['profile_bundesland'].

Unter der Funktion " function mymodule_validate " ändere ich dann noch

"if ($element['#value'] == t('please select'))"

in

"if ($element['#value'] == t('Auswahl'))"

und

"form_set_error('my_select_list'"

in

"form_set_error('profile_bundesland'".

Habe ich da was falsch verstanden?

<?php
function mymodule_form_user_profile_form_alter(&$form, &$form_state) {
 
$form['profile_bundesland']['#element_validate'][] = 'mymodule_validate';
}
function
mymodule_validate($element, $form_state) {
  if (
$element['#value'] == t('Auswahl')) {
   
form_set_error('profile_bundesland', t('Please select an answer from the list.'));
  }
}
?>

  • Anmelden oder Registrieren um Kommentare zu schreiben

Mit

Eingetragen von Tobias Bähr (4019)
am 28.06.2009 - 19:02 Uhr

Mit $form_state.

<?php
function mymodule_form_user_profile_form_alter(&$form, &$form_state) {
 
$form['profile_bundesland']['#element_validate'][] = 'mymodule_validate';
}
function
mymodule_validate($element, $form_state) {
  if (
$form_state['values'] == t('Auswahl')) {
    return
form_set_error('profile_bundesland', t('Please select an answer from the list.'));
  }
}
?>

----------------------------------------

http://tobiasbaehr.de/
Gelöste Forenbeiträge mit [gelöst] im Titel ergänzen
Ein Forum ist kein Ersatz für das www (Google.de).

  • Anmelden oder Registrieren um Kommentare zu schreiben

t-Funktion

Eingetragen von stBorchert (6003)
am 28.06.2009 - 21:40 Uhr
madmattus schrieb

t('please select') ==> t('Auswahl'))

Nur so nebenbei: Texte, die mit Hilfe der Funktion t() ausgegeben werden, sind übersetzbar. Da die Standardsprache von Drupal Englisch ist, werden der Funktion auch nur englischsprachige Texte übergeben, die dann über die Oberfläche übersetzt werden.

Bei weissen Bildschirmen hilft ein Blick in das error-log von PHP (konfigurierbar in der php.ini) sehr häufig weiter. Dort stehen dann nämlich eventuelle Fehler.

hth,

 Stefan

--
sei nett zu Deinem Themer

  • Anmelden oder Registrieren um Kommentare zu schreiben

Guten Morgen, danke Jungs

Eingetragen von madmattus (41)
am 29.06.2009 - 07:26 Uhr

Guten Morgen,
danke Jungs für die Hilfe aber es läuft immer noch nicht, sobald ich den speichern Button klick kommt ein weißer Bildschirm.

@Stefan, ich habe keinen Zugriff auch die error-log´s mein Webspace stellt diese nicht zur Verfügung aber ich werde mal meinen Provider kontaktieren.

Besten Gruß
Markus

  • Anmelden oder Registrieren um Kommentare zu schreiben

Also ich habe es getestet

Eingetragen von Tobias Bähr (4019)
am 29.06.2009 - 11:24 Uhr

Also ich habe es getestet und es funktioniert. Bitte paste mal dein kleines Modulchen.

----------------------------------------

http://tobiasbaehr.de/
Gelöste Forenbeiträge mit [gelöst] im Titel ergänzen
Ein Forum ist kein Ersatz für das www (Google.de).

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hey Tobias, hier mein

Eingetragen von madmattus (41)
am 30.06.2009 - 08:13 Uhr

Hey Tobias,
hier mein Modulchen

Dateiname: mymodule.module und mymodule.info

mymodule.info

; $Id: mymodule.info, v 1.0 2009/06/30 19:00:00 quiptime $
name = Pflichtfeld Auswahliste
description = Erzeut ein Pflichtfeld in einem Mehrauswahlfeld.
package = Pflichtfeld Auswahliste
version = VERSION
core = 6.x

; Information added by quiptime on 2009-06-30
version = "6.x-dev"
project = "mymodule"

mymodule.module

<?php
/* $Id: mymodule.module,v 1.0 2009/06/30 19:00:00 quiptime $ */

function mymodule_form_user_profile_form_alter(&$form, &$form_state) {
 
$form['profile_bundesland']['#element_validate'][] = 'mymodule_validate';
}
function
mymodule_validate($element, $form_state) {
  if (
$form_state['values'] == t('please select')) {
    return
form_set_error('profile_bundesland', t('Please select an answer from the list.'));
  }
}
?>

Danke im Voraus
Gruß Markus

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ach verdammt diese Copy &

Eingetragen von Tobias Bähr (4019)
am 30.06.2009 - 08:49 Uhr

Ach verdammt diese Copy & Paste Fehler.

Mach mal

<?php
function mymodule_validate($element, $form_state) {
  if (
$form_state['values']['profile_bundesland'] == t('please select')) {
    return
form_set_error('profile_bundesland', t('Please select an answer from the list.'));
  }
}
?>

----------------------------------------

http://tobiasbaehr.de/
Gelöste Forenbeiträge mit [gelöst] im Titel ergänzen
Ein Forum ist kein Ersatz für das www (Google.de).

  • Anmelden oder Registrieren um Kommentare zu schreiben

Listenauswahlfeld als Pflichtfeld [gelöst]

Eingetragen von madmattus (41)
am 30.06.2009 - 09:56 Uhr

Hey Tobians,

SUPER GEIL :-) klappt jetzt endlich!! Danke

Musste nur noch das "please select" mit meinem Platzhalter "Auswahl" austauschen und es hat funktioniert.

Vielen Dank an alle für die Hilfe!

Gruß
Markus

  • Anmelden oder Registrieren um Kommentare zu schreiben

t-Funktion

Eingetragen von stBorchert (6003)
am 30.06.2009 - 10:02 Uhr
madmattus schrieb

Musste nur noch das "please select" mit meinem Platzhalter "Auswahl" austauschen ...

Wie bereits schon vorher gesagt: Texte innerhalb der t() Funktion sind in englischer Sprache zu schreiben und dann über die Oberfläche zu übersetzen. Anders ist falsch.

 Stefan

--
sei nett zu Deinem Themer

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ja da habe ich dran gedacht,

Eingetragen von madmattus (41)
am 30.06.2009 - 10:19 Uhr

Ja da habe ich dran gedacht, hab es nur zum Test ausgetauscht.
Danke noch mal.

Gruß
Markus

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • Dynamische Ansicht von Seiteninhalt (als Tabelle?)
  • Vergabe von Berechtigungen für bestimmte Rollen; mir fehlt der Haken bzw. das „Veröffentlicht“
  • Ich brauche dringen Hilfe zu Updates oder ggf. wwie geht Composer?
  • Medien und andere Daten mit Feeds von Drupal 7 auf Drupal 10 migrieren
  • Rolle erstellen nicht zu finden
  • 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
Weiter

Neue Kommentare

  • Arrrrg. Nix Tabelle :-D /*
    vor 1 Woche 1 Tag
  • Textboxen mit Tabelle
    vor 1 Woche 2 Tagen
  • Du sollst ja auch keine
    vor 1 Woche 2 Tagen
  • Theme
    vor 1 Woche 2 Tagen
  • Welches Theme benutzt du
    vor 1 Woche 2 Tagen
  • Mit Responsive Raster hatte
    vor 1 Woche 3 Tagen
  • Hallo Alex,um das Häkchen
    vor 1 Woche 3 Tagen
  • Modul view_unpublished
    vor 1 Woche 4 Tagen
  • Modul "override node options"
    vor 1 Woche 5 Tagen
  • Im Grunde ist dass ein
    vor 2 Wochen 12 Stunden

Statistik

Beiträge im Forum: 250270
Registrierte User: 20479

Neue User:

  • Stevebok
  • Robertnobia
  • AltonRaf

» Alle User anzeigen

User nach Punkten sortiert:
wla9463
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 20 Gäste online.

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