diff --git a/multifield.module b/multifield.module index 7e02b15..9eb041a 100644 --- a/multifield.module +++ b/multifield.module @@ -554,7 +554,7 @@ function _multifield_subfield_views_data($field) { /** * Implements hook_field_views_data(). */ -function multifield_field_views_data($field) { +function xxxmultifield_field_views_data($field) { $data = field_views_field_default_views_data($field); $results = _multifield_subfield_views_data($field); @@ -621,3 +621,43 @@ function multifield_field_views_data($field) { return $data; } + +/** + * Implements hook_field_views_data(). + */ +function multifield_field_views_data($field) { + $field_info = field_info_fields(); + $multifields = multifield_get_fields(); + + $multifield_subfields = multifield_type_get_subfields($multifields[$field['field_name']]); + $data = field_views_field_default_views_data($field); + + foreach ($data as &$table) { + if (isset($table[$field['field_name']]['field'])) { + foreach ($multifield_subfields as $multifield_subfield) { + $subfield_info = $field_info[$multifield_subfield]; + $subfield_data = field_views_field_default_views_data($subfield_info); + + $base_field = $field['field_name']; + $new_name = $base_field . '_' . $multifield_subfield; + + $table[$new_name] = $subfield_data['field_data_' . $multifield_subfield][$multifield_subfield]; + $table[$new_name]['table'] = $table[$base_field]['field']['table']; + $table[$new_name]['field']['table'] = $table[$base_field]['field']['table']; + $table[$new_name]['field']['entity_tables'] = $table[$base_field]['field']['entity_tables']; + $table[$new_name]['field']['real field'] = $base_field . '_' . $table[$new_name]['field']['real field']; + + foreach ($table[$new_name]['field']['additional fields'] as $index => $additional) { + if (!in_array($additional, array('delta', 'language', 'bundle'))) { + $table[$new_name]['field']['additional fields'][$index] = $base_field . '_' . $table[$new_name]['field']['additional fields'][$index]; + if (($key = array_search($table[$new_name]['field']['additional fields'][$index], $table[$base_field]['field']['additional fields'])) !== false) { + unset($table[$base_field]['field']['additional fields'][$table[$new_name]['field']['additional fields'][$index]]); + } + $table[$table[$new_name]['field']['additional fields'][$index]]['field'] = $table[$new_name]['field']; + } + } + } + } + } + return $data; +}