diff -u b/MultifieldViewsHandler.php b/MultifieldViewsHandler.php --- b/MultifieldViewsHandler.php +++ b/MultifieldViewsHandler.php @@ -302,7 +302,7 @@ } $this->ensure_my_table(); - $column = _field_sql_storage_columnname($this->definition['field_name'], $this->options['click_sort_column']); + $column = _field_sql_storage_columnname($this->definition['field_name'], _field_sql_storage_columnname($this->definition['subfield_name'], $this->options['click_sort_column'])); if (!isset($this->aliases[$column])) { // Column is not in query; add a sort on it (without adding the column). $this->aliases[$column] = $this->table_alias . '.' . $column; @@ -313,7 +313,7 @@ function option_definition() { $options = parent::option_definition(); - // option_definition runs before init/construct, so no $this->field_info + // option_definition runs before init/construct, so no $this->subfield_info $field = field_info_field($this->definition['subfield_name']); $field_type = field_info_field_types($field['type']); $column_names = array_keys($field['columns']); @@ -393,7 +393,7 @@ } // No need to ask the user anything if the field has only one column. - if (count($field['columns']) == 1) { + if (count($subfield['columns']) == 1) { $form['click_sort_column'] = array( '#type' => 'value', '#value' => isset($column_names[0]) ? $column_names[0] : '', @@ -705,7 +705,7 @@ $entity_type = $values->_field_data[$this->field_alias]['entity_type']; $langcode = $this->field_language($entity_type, $entity); if (empty($langcode)) { - $langcode = 'und'; + $langcode = LANGUAGE_NONE; } // If we are grouping, copy our group fields into the cloned entity. @@ -834,7 +834,7 @@ $langcode = $this->field_language($entity_type, $entity); if (empty($langcode)) { - $langcode = 'und'; + $langcode = LANGUAGE_NONE; } $multifield_items = field_get_items($entity_type, $entity, $this->definition['field_name'], $langcode); @@ -883,30 +883,14 @@ } function document_self_tokens(&$tokens) { - $field = $this->field_info; - foreach ($field['columns'] as $id => $column) { - $tokens['[' . $this->options['id'] . '-' . $id . ']'] = t('Raw @column', array('@column' => $id)); + if ($this->fieldHandler) { + $this->fieldHandler->document_self_tokens($tokens); } } function add_self_tokens(&$tokens, $item) { - $field = $this->field_info; - foreach ($field['columns'] as $id => $column) { - // Use filter_xss_admin because it's user data and we can't be sure it is safe. - // We know nothing about the data, though, so we can't really do much else. - - if (isset($item['raw'])) { - // If $item['raw'] is an array then we can use as is, if it's an object - // we cast it to an array, if it's neither, we can't use it. - $raw = is_array($item['raw']) ? $item['raw'] : (is_object($item['raw']) ? (array) $item['raw'] : NULL); - } - if (isset($raw) && isset($raw[$id]) && is_scalar($raw[$id])) { - $tokens['[' . $this->options['id'] . '-' . $id . ']'] = filter_xss_admin($raw[$id]); - } - else { - // Take sure that empty values are replaced as well. - $tokens['[' . $this->options['id'] . '-' . $id . ']'] = ''; - } + if ($this->fieldHandler) { + $this->fieldHandler->add_self_tokens($tokens, $item); } } diff -u b/multifield.module b/multifield.module --- b/multifield.module +++ b/multifield.module @@ -587,6 +587,12 @@ $table[$f_data['field']['additional fields'][$index]]['field']['handler'] = 'MultifieldViewsHandler'; $table[$f_data['field']['additional fields'][$index]]['field']['subfield_name'] = $f_data['field']['field_name']; $table[$f_data['field']['additional fields'][$index]]['field']['field_name'] = $base_field; + if (isset($subfield_data['field_data_' . $multifield_subfield][$source_field]['field'])) { + $table[$f_data['field']['additional fields'][$index]]['field']['subfield handler'] = $subfield_data['field_data_' . $multifield_subfield][$source_field]['field']['handler']; + } + else { + $table[$f_data['field']['additional fields'][$index]]['field']['subfield handler'] = $f_data['field']['handler']; + } foreach (array('argument', 'filter', 'sort') as $handler) { if (isset($subfield_data['field_data_' . $multifield_subfield][$source_field][$handler]) && isset($table[$f_data['field']['additional fields'][$index]][$handler])) { // Overwrite handler.