Hinzufügen von Attribut option-element mit forms api : drupal 7
Möchte ich hinzufügen, dass title="icons/icon_cart.gif" für jede der folgenden Optionen in meiner select-Liste, die gerendert wird, mithilfe von Ansichten.
Nach versuchen und dem Lesen vieler Artikel, die ich kann nicht scheinen, einen Weg zu finden, zu fügen Sie diesen html-Code in meine form.
Unten ist mein code.
function customchatter_form_alter(&$form, &$form_state, $form_id) {
$form["tid"]["#options"][1]=t("nooo chatter");
//this works to change the label of the option but how do I add title="icons/icon-
cart.gif" ?
}
Mein html-code:
<select id="edit-tid" name="tid" class="form-select">
<option value="All">- Any -</option>
<option value="1">nooo chatter</option>
<option value="2">Complaints Complaints</option>
<option value="3">Gear & Gadgets</option>
</select>
Cheers,
Vishal
UPDATE
Ich habe versucht, aktualisieren Sie den code wie pro Clive Ratschläge, aber die Werte sind immer noch nicht kommen, bis Sie rechts. Unten ist meine Geschichte.
So unten ist der html-Ausgabe bin ich in der Lage zu erreichen, aber der Titel scheint immer die Nummer 1.
<select id="edit-select" class="form-select" name="select">
<option value="1" title="1">One</option>
<option value="2" title="1">Two</option>
</select>
Wie Sie sehen können Titel ist da, aber der Wert ist falsch. Unten ist meine form und die Funktionen, die ich schrieb.
Meine form:
$form['select'] = array(
'#type' => 'select',
'#options' => array(1 => 'One', 2 => 'Two'),
'#title' => array(1 => 'One', 2 => 'Two')
//I tried many combinations but nothing seems to work.
);
Mein Thema Funktionen.
function kt_vusers_select($variables) {
$element = $variables['element'];
element_set_attributes($element, array('id', 'name', 'size'));
_form_set_class($element, array('form-select'));
return '<select' . drupal_attributes($element['#attributes']) . '>' .
kt_vusers_form_select_options($element) . '</select>';
}
function kt_vusers_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);
//@vishal so there I have declared the variable to accept the values.
$vtitle = isset($element['#title']) || array_key_exists('#title', $element);
$value_is_array = $value_valid && 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 && (!$value_is_array && (string) $element['#value'] === $key ||
($value_is_array && in_array($key, $element['#value'])))) {
$selected = ' selected="selected"';
}
else {
$selected = '';
}
//@vishal this is where the variable is being used.
$options .= '<option title="'.$vtitle.'" value="' . check_plain($key) . '"' . $selected .
'>' . check_plain($choice) . '</option>';
}
}
return $options;
}
unten ist der richtige code für das Letzte Thema Funktion
function kt_vusers_form_select_options($element, $choices = NULL, $vtitles=NULL) {
//Build up your own version of form_select_options here
//that takes into account your extra attribute needs.
//This will probably involve inspecting your custom FAPI property,
//which we'll call #extra_option_attributes
if (!isset($choices)) {
$choices = $element['#options'];
$vtitles = array();
$vtitles = $element['#title'];
}
//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 = $value_valid && is_array($element['#value']);
$options = '';
// print_r($vtitles);
während
(
(list($key, $Auswahl) = each($Auswahl))
&& (list($keytwo, $vtitle) = each($vtitles))
)
{
//printf("%s => %s, %s => %s \n", $key1, $Wert1, $key2, $Wert2);
if (is_array($choice)) {
$options .= '<optgroup label="' . $key . '">';
$options .= kt_vusers_form_select_options($element, $choice);
$i++;
//$options .= form_select_options($element, $vtitle);
$options .= '</optgroup>';
} //end if if is_array
elseif(is_object($choice)) {
$options .= form_select_options($element, $choice->option);
} //end of else if
else {
$key = (string) $key;
if ($value_valid && (!$value_is_array && (string) $element['#value'] === $key ||
($value_is_array && in_array($key, $element['#value'])))) {
$selected = ' selected="selected"';
}
else {
$selected = '';
}
//$options .= '<option title="'.$vtitle.'" value="' . check_plain($key) . '"' .
$selected . '>' . check_plain($choice) . '</option>';
}
$options .= '<option value="'. check_plain($key) .'" title="' . $vtitle . '"' . $selected
.'>'. check_plain($choice) .'</option>';
} //end of choice
return $options;
} //end of function
InformationsquelleAutor Vishal Khialani | 2012-02-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich fürchte, du wirst zu haben, um zu Graben ziemlich weit unten, dies zu tun, die
#options
array ist vereinfachtform_select_options()
und es derzeit nicht enthalten jede Art von hinzufügen von Attributen. Dies ist der code:Wie Sie sehen können, es gibt einfach keinen Spielraum für die Attribute gibt. Sie werden in der Lage sein, dies zu ändern, obwohl, aber es soll sich um die Umsetzung Ihrer eigenen version von
theme_select()
und Ihre eigenen FAPI-Eigenschaft.Habe ich noch nicht mal Fleisch die ganze Sache aus aber in deinem theme-Datei, die Sie würden tun so etwas wie dieses:
Finden form_select_options für den Bau
MYTHEME_form_select_options
Und Ihren code in der form wäre so etwas wie:
In
MYTHEME_form_select_options()
können Sie dann prüfen, das element ist#extra_option_attributes
- Taste (falls vorhanden), um zu sehen, wenn Sie brauchen, um physisch noch mehr Attribute in der HTML, die Sie erstellen.Hoffe, das hilft, ich weiß, es scheint wie eine Irre langatmig Weise zu tun, was Sie müssen, aber soweit ich weiß, es ist der einzige Weg.
danke clive. Ich gebe es einen Schuss, und wieder zurück.
clive ich habe aktualisiert die post ich bin in der Lage, um den Titel dort in der html-aber der Wert scheint mir immer zu sein.
In meinem Fall bin ich immer Fehler "Undefined index: render element in theme ()", $element = $Variablen['element']; in Thema.inc-Datei.
Verdammt deprimierend... Thema Lösungen immer das Gefühl, schmutzig. Naja.
InformationsquelleAutor Clive
Ungetestet, aber Sie haben versucht:
Müssen Sie möglicherweise Durcheinander herum mit den Namen des Elements, etc, aber die # - Attribute-tag arbeiten soll.
EDIT: Wie bereits in Clive Antwort, das wird nicht funktionieren, aber ich überlasse es den Fall, dass jemand will, um zu wissen, wie Sie Attribute hinzufügen, um weitere Felder (Textfelder etc).
+1 weil ich nicht denke, dass negative rep auf eine Antwort, war in gutem glauben ist fair!
Sie sind ein gentleman.
InformationsquelleAutor SpaceBeers
Getestet
Versuchen:
statt:
$form["tid"]
['#options']
[1]['#attributes'] = array('title' => t('nooo chatter'));
Ist es möglich, beliebige Attribute hinzufügen, um Elemente auf diese Weise. Ich entdeckte diese nach der Durchführung einige tests auf der Grundlage diese Antwort.
Erwähnte auch hier und hier.
InformationsquelleAutor JoBu1324