Listeneinträge mit <optgroup> groupieren
Eingetragen von DrupalFan (1646)
am 03.10.2007 - 12:04 Uhr in
am 03.10.2007 - 12:04 Uhr in
Hallo,
ich möchte die Listeinträge bei 2 Profilfeldern (Land, Bundesland) mit
<optgroup>
gruppieren, also zwischen den einzelnen Listeneinträgen kleine "Überschriften" drin haben, die nicht anklickbar sind (dadurch ergibt sich diese Gruppierung).
Habe alles versucht herauszufinden, wie man das macht.
Hat jemand einen Tipps für mich?
Geht das überhaupt?
Vielen Dank.
- Anmelden oder Registrieren um Kommentare zu schreiben
Wass denn?
am 03.10.2007 - 12:13 Uhr
Habe alles versucht herauszufinden, wie man das macht.
Was hast Du denn alles versucht?
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
Da geht noch was.
Gegoogelt
am 03.10.2007 - 12:58 Uhr
Habe gegoogelt und drupal.org vollständig durchsucht, es ist zwar ein paar Mal die Rede von
<optgroup>
aber weder im Zusammenhang mit Profilfeldern noch wie man eine bestehendes Listenfeld gruppieren kann.Vielleicht gibts ja doch irgendwo eine Anleitung oder zumindest einen Hinweis. Poste einfach den Link.
Was weißt Du denn darüber?
Man kann die Anzeige des
am 03.10.2007 - 14:02 Uhr
Man kann die Anzeige des Profil mit einem Template beeinflussen. Zum Thema Userprofil und Template solltest Du bei der Suche sehr schnell nicht nur im drupal.org Handbuch und eventuell auch hier fuendig werden.
Du bist Dir schon im Klaren wofuer optgroup eigentlich verwendet wird?
Wenn Du das Profil mit einem Template aenderst wuerde ich aber nicht optgroup nehmen sondern fieldset und label.
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
Da geht noch was.
Eigentlich will ich "nur" in
am 03.10.2007 - 14:38 Uhr
Eigentlich will ich "nur" in der Select-Liste "Bundesland" die Einträge
--- Deutschland ---
Berlin
Brandenburg
usw
--- Schweiz ---
Bern
Zürich
usw.
--- Österreich ---
Wien
Niederösterreich
usw.
statt als Trennzeichen "normalen Listeinträge", die mit --- markiert sind, verwenden, sondern eben sozusagen Überschriften in der Selectliste haben, die nicht anklickbar sind.
Ich weiß, dass das mit optgroup machbar ist, wenn es anders auch geht, wär auch okay.
Ich will aber nicht das gesamte Registrierformular ändern oder mit hook-Funktionen überschreiben, sondern lediglich 2 Stück Selectlisten dahingehend ändern, dass die "Bereichs-Überschriften" innerhalb der Selektliste nicht anklickbar sind und hervorgehoben sind (einrücken oder fett).
Bitte gib mir noch einen genaueren Tipp, falls mit fieldsets oder css machbar, wär auch okay. Ich will nur die Selectlisten ändern, sonst nichts.
(Eine andere Möglichkeit wäre, die Liste "Bundesland" zunächst leer zu lassen und erst mit Werten zu füllen, wenn ein Land gewählt wurde. Das ist eine ganz andere Variante, aber wenn dafür die Lösung leichter umsetzbar ist, wär das auch toll. JavaScript? Ajax? Drupal-Modul?).
Vielen Dank.
Zusammenspiel der 3 Tags fieldset label optgroup
am 03.10.2007 - 19:45 Uhr
Jetzt glaube ich Dich etwas besser zu verstehen mit dem was Du willst.
Hier ein Beispiel fuer das Zusammenspiel der 3 Tags fieldset label optgroup in einer Auswahlliste:
<form>
<fieldset><label>Speisen</label>
<select name="select">
<optgroup label="Italienische Gerichte">
<option>Pizza</option>
<option>Tortelloni</option>
<option>Bifsteca</option>
</optgroup>
<optgroup label="Deutsche Gerichte">
<option>Pfannkuchen</option>
<option>Tafelspitz</option>
<option>Fischstäbchen</option>
</optgroup>
<optgroup label="Süßes" disabled="disabled">
<option>Schokoriegel</option>
<option>Sahneeis</option>
<option>Kaugummi</option>
<option>Pfefferminz</option>
</optgroup>
</select>
</fieldset>
< /form>
Geht es in diese Richtung?
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
Da geht noch was.
Genau!
am 03.10.2007 - 19:54 Uhr
Ja genau, sowas will ich machen!!!!
Es geht um die select-Liste bei der Registierung (und User-Bearbeitung). Die select-Liste "Bundesland" für das Userprofil wird ja unter
"Verwalten - Benutzerverwaltung - Profile"
erstellt. Dort kann man ja ein "Listenauswahlfeld" anlegen, was ich auch schon lange gemacht habe. Die Trennungen (wie hier im Bsp. "Italienische Gerichte" usw) sollen nicht anklickbar sein, durch obiges Beispiel wär das erreichbar.
Aber ich kann nirgendwo die selectliste verändern, ich kann nur in das Feld "Auswahloptionen" alle Bundesländer eingeben, es gibt aber keine Möglichkeit die "Trenner" oder "Bereichsüberschriften" (wie "Italienische Gerichte") zu markieren!!!!
Wie gesagt, möchte nicht die ganze Profilseite neu machen, sondern nur die select-Liste für das Bundesland.
Aber wie?
Vielen Dank für weitere Tipps.
die Grenzen des Machbaren des Core Profil Modules
am 03.10.2007 - 20:10 Uhr
Die Trennungen (wie hier im Bsp. "Italienische Gerichte" usw) sollen nicht anklickbar sein, durch obiges Beispiel wär das erreichbar.
Die sind eigentlich nicht klickbar. Hier der Code meines Beispiels als Demo
http://www.mediaevent.de/xhtml/optgroup.html
Aber ich kann nirgendwo die selectliste verändern, ich kann nur in das Feld "Auswahloptionen" alle Bundesländer eingeben, es gibt aber keine Möglichkeit die "Trenner" oder "Bereichsüberschriften" (wie "Italienische Gerichte") zu markieren!!!!
Wie gesagt, möchte nicht die ganze Profilseite neu machen, sondern nur die select-Liste für das Bundesland.
Naja, hier stoesst Du an die Grenzen des Machbaren des Profil Modules.
Um das von Dir Gewuenschte zu realisieren musst Du wohl in das Modul eingreifen.
Eventuell verwendest Du auch als Alternative das Modul Node Profile. Dieses Modul setzt auf das normale Profil Modul auf. Mit diesem Modul hast Du echte Nodes als Profilseiten. Diese Nodes kann man mit CCK veraendern.
Inwieweit nun die Moeglichkeiten der diffrenzierten Gestaltung von Select Listen mit CCK hinsichtlich optgroup gegeben sind muesste man ausloten. Auf jeden Fall gibt es erst mal mit CCK mehr Moeglichkeiten als im normalen Profil Modul des Core.
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
Da geht noch was.
Ich habe gesucht und in
am 03.10.2007 - 20:43 Uhr
Ich habe gesucht und in "includes/form.inc" folgenden Code gefunden:
/**
* Format a dropdown menu or scrolling selection box.
*
* @param $element
* An associative array containing the properties of the element.
* Properties used: title, value, options, description, extra, multiple, required
* @return
* A themed HTML string representing the form element.
*
* It is possible to group options together; to do this, change the format of
* $options to an associative array in which the keys are group labels, and the
* values are associative arrays in the normal $options format.
*/
function theme_select($element) {
$select = '';
$size = $element['#size'] ? ' size="' . $element['#size'] . '"' : '';
_form_set_class($element, array('form-select'));
$multiple = isset($element['#multiple']) && $element['#multiple'];
return theme('form_element', $element, '<select name="'. $element['#name'] .''. ($multiple ? '[]' : '') .'"'. ($multiple ? ' multiple="multiple" ' : '') . drupal_attributes($element['#attributes']) .' id="'. $element['#id'] .'" '. $size .'>'. form_select_options($element) .'</select>');
}
function form_select_options($element, $choices = NULL) {
if (!isset($choices)) {
$choices = $element['#options'];
}
// array_key_exists() accommodates the rare event where $element['#value'] is NULL.
// isset() fails in this situation.
$value_valid = isset($element['#value']) || array_key_exists('#value', $element);
$value_is_array = is_array($element['#value']);
$options = '';
foreach ($choices as $key => $choice) {
if (is_array($choice)) {
$options .= '<optgroup label="'. $key .'">';
$options .= form_select_options($element, $choice);
$options .= '</optgroup>';
}
elseif (is_object($choice)) {
$options .= form_select_options($element, $choice->option);
}
else {
$key = (string)$key;
if ($value_valid && ((string)$element['#value'] === $key || ($value_is_array && in_array($key, $element['#value'])))) {
$selected = ' selected="selected"';
}
else {
$selected = '';
}
$options .= '<option value="'. check_plain($key) .'"'. $selected .'>'. check_plain($choice) .'</option>';
}
}
return $options;
}
Ich seh das so: Wenn ein Eintrag der Selectliste nicht ein String sondern ein Array ist, dann wird automatisch eine "optgroup" angelegt.
Das klingt ja gut, ist also im Drupalcode enthalten.
Aber wie anwenden?
Wie bekomme ich unter "/admin/user/profile/add/selection" bei den Auswahloptionen ein Array rein, etc?
Geht das?
am 03.10.2007 - 21:37 Uhr
Wie kann ich in der mysql-Datenbank in ein Feld vom Typ "text" statt pro Zeile einen Wert, ein Array reinschreiben? (So dass "is_array($choice)" true ergibt).
EDIT:
Ich weiß jetzt, das ginge mit serialize, aber das löst das Problem nicht, man müsste Drupal umschreiben.
Aber obiger Code ist doch in Drupal, schade, dass man optgroup trotzdem nicht nutzen kann.
Hat noch jemand eine Idee?
Vielen Dank.