Kleines Problem beim Widget erstellung
am 15.12.2011 - 13:19 Uhr in
Hallo,
ich versuche gerade mein erstes Modul mit hilfe der Field API zu schreiben.
Und zwar soll es für den Content Author möglich sein, aus einer Liste von Benutzern die in eine bestimmte Rolle sind einen Auszuwählen.
Dazu versuche ich ein Widget zu schreiben der per SQL Abfrage mir die Liste der Benutzer mit role id=4 holt und diese in die Select liste anzeigt.
Die SQL Abfrage klappt soweit u auch eine leere Select liste wird angezeigt.
Mein Problem ist jetzt, dass ich nicht weiß wie ich die geholten User id/ Username in die Select Liste packen kann. Diese sind in der Funktion: "selectuserbyrole_field_widget_value" in einem Array $list gespeichert.
Hoffe auf einem tipp von euch :)
So soll es am ende aussehen:
<select class="form-select">
<option value="_none">None</option>
<option value="0">Anonymous</option>
<option value="1">admin</option>
<option value="22">Bob</option>
<option value="45">Marry</option>
</select>So sieht es z.zt. aus:
<select class="form-select">
</select><?php
/**
* Implements hook_field_widget_info().
*/
function selectuserbyrole_field_widget_info(){
return array(
'selectuserbyrole_selectfield' => array(
'label' => t('Select user by Role'),
'field types' => array('entityreference',),
),
);
}
/**
* Implements hook_field_widget_form().
*/
function selectuserbyrole_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element){
$element = array(
'#type' => 'select',
'#default_value' => '0',
'#value_callback' => 'selectuserbyrole_field_widget_value',
);
return $element;
}
function selectuserbyrole_field_widget_value($element){
$result = db_query("SELECT u.uid, u.name, ur.uid, ur.rid
FROM {users} AS u, {users_roles} AS ur
WHERE u.uid = ur.uid
AND ur.rid =4");
$list = array();
foreach ($result as $record) {
$list[] = t('@uid: @value', array(
'@uid' => $record->name,
'@value' => $record->uid,
));
}
return $list;
}
?>- Anmelden oder Registrieren um Kommentare zu schreiben

statt #value_callback einfach
am 03.02.2012 - 01:43 Uhr
statt #value_callback einfach #options und die funktion ohne ' ' schreiben...
wofür brauchst du das $element als argument, es tauch doch garnicht in der funktion auf??
aber dies hätte man auch mit cck machen können,
dort kannst du für die werteliste einen php code schreiben der dir ein array zurück gibt