Automatisierung des Listens mehrerer Strings in eine "Zulässige Werteliste" eines "Liste (Text)"-Feldes
am 18.07.2013 - 16:33 Uhr in
Hallo,
hab wirklich lange im Netz gesucht und nichts Vergleichbares gefunden...
kann mir jemand eine Möglichkeit nennen, wie ich einige Strings jeweils als Eintag in eine "Zulässige Werteliste" eines "Liste (Text)" bekomme? Ich tippe mal, dass muss über PHP geschehen? Nur wie...
Die Strings habe ich jetzt funktionierend in einer "Rules"-"Aktion"-"Eigenen PHP-Code ausführen" vorliegen. Die sollen jetzt nur noch in einen anderen Inhaltstyp (der in dieser PHP-Anweisung gerade erstellt wird) in eine "Zulässige Werteliste" in einem "Liste (Text)"-Feld.
Falls mehr Infos notwendig sind oder das zu wirrwarrig klingt, bitte nochmal kurz Bescheid geben.
Vielen Dank schonmal,
Bas.
PS: Oder kann ich die Strings an ein mir nicht bekanntes Modul übergeben, der sie dann in die Werteliste einträgt?
- Anmelden oder Registrieren um Kommentare zu schreiben
allowed values function
am 19.07.2013 - 09:51 Uhr
Moin.
In Drupal 7 gibt es (wie schon in Drupal 6) die Möglichkeit, eine Funktion anzugeben, über die die Liste der zulässigen Werte generiert wird (anstelle der festen Liste, die man in der Feldkonfiguraion eingeben kann).
Allerdings ist das Feld für den Funktionsnamen ausgeblendet, so dass man es durch ein eigenes Modul erst "aktivieren" muss:
<?php
/**
* Implements hook_form_FORM_ID_alter().
*
* Enable "allowed values function".
*/
function MYMODULE_form_field_ui_field_edit_form_alter(&$form, &$form_state) {
if (isset($form['#instance']['widget']['type']) && $form['#instance']['widget']['type'] == 'options_select') {
// Enable allowed_values_function.
$form['field']['settings']['allowed_values_function'] = array(
'#type' => 'textfield',
'#title' => t('Allowed values function'),
'#default_value' => empty($form['#field']['settings']['allowed_values_function']) ? '' : $form['#field']['settings']['allowed_values_function'],
);
}
}
?>
Wenn Du das in ein eigenes Modul packst, hast Du in der Feldkonfiguration ziemlich weit unten ein neues Feld, in das Du dann den Namen der Funktion eingeben kannst, die die Werteliste erzeugt:
Eine solche Funktion könnte so aussehen:
<?php
/**
* Generate list of allowed values for list fields.
*
* @return <array>
* Associative array with allowed values.
*/
function complaints_field_allowed_values($field, $instance = NULL, $entity_type = NULL, $entity = NULL) {
$field_name = (is_array($field) && isset($field['field_name'])) ? $field['field_name'] : $field;
$allowed_values = array();
switch ($field_name) {
case 'field_complaint_reason':
return array(
'rudeness' => t('Rudeness', array(), array('context' => 'complaints')),
'spam' => t('Spam', array(), array('context' => 'complaints')),
'other' => t('Other', array(), array('context' => 'complaints')),
);
}
// Allow other modules to modify the list of allowed values.
drupal_alter('complaints_allowed_values', $allowed_values);
return $allowed_values;
}
?>
Je nachdem, wie Du die Werte in der Rule speicherst (zum Beispiel in einer Variable), kannst Du sie dann wieder über die Funktion ausgeben lassen.
hth,
Stefan
Tipp: Beachte die Verhaltensregeln des DrupalCenter.