Jeśli dobrze zrozumiałem, to chcesz, żeby w zależności od pewnego pola uzależnić etykiety innych pól.
Ok, więc możesz to zrobić tak:
1. Dajesz jedno pole typu commondata, które wybiera poszczególne rodzaje słownika.
2. Ustawiasz QFfield_callback dla tego pola taki, żeby użytkownik nie mógł edytować tego pola, żeby zawsze wyświetlała się wartość statyczna
public static function QFfield_dict_type(&$form, $field, $label, $mode, $default, $desc, $rb_obj) {
Utils_RecordBrowserCommon::QFfield_static_display($form, $field, $label, $mode, $default, $desc, $rb_obj);
}
3. Dla każdego pola możesz zmienić etykietę - dajesz custom QFfield_callback dla tego pola i robisz coś w tym stylu:
public static function QFfield_dict_name(&$form, $field, $label, $mode, $default, $desc, $rb_obj) {
$type = $rb_obj->record['dict_type'];
$new_label = self::get_label($label, $type); // musisz napisać taką funkcję statyczną, która dla danej etykiety i typu pola zwróci odpowiednią etykietę. Możesz też zrobić tutaj ten kod.
$callback = Utils_RecordBrowserCommon::get_default_QFfield_callback($desc['type']); // to jest typ pola (select, text, multiselect) - nie Twój typ słownika
$args = array($field, $new_label, $mode, $default, $desc, $rb_obj);
call_user_func_array($callback, $args);
}
4. Przy wyświetlaniu modułu możesz ustawić wielokrotne domyślne wartości, wtedy pojawi się okienko z wyborem.
$types = Utils_CommonDataCommon::get_array( <twój array commondata> );
$defaults = array();
foreach ($types as $key => $label) {
$defaults[$label] = array('dict_type' => $key);
}
$rb->set_defaults($defaults, true); // drugi parametr mówi o tym, że są wielokrotne domyślne dane.
Pamietaj o tym, że wszystkie etykiety i nazwy callbacków musisz sam dostosować z moich przykładów.
Pozdrawiam,
Adam