Index: modules/cck/content_views.inc =================================================================== RCS file: /cvs/drupal/contributions/modules/cck/content_views.inc,v retrieving revision 1.1.2.4 diff -u -r1.1.2.4 content_views.inc --- modules/cck/content_views.inc 21 Aug 2006 03:06:45 -0000 1.1.2.4 +++ modules/cck/content_views.inc 11 Oct 2006 01:26:08 -0000 @@ -41,23 +41,30 @@ $columns = $db_info['columns']; $main_column = array_shift($columns); - $addlfields = array(); - foreach ($columns as $column => $attributes) { - $addlfields[] = $attributes['column']; - } $table['fields'] = array(); $table['fields'][$main_column['column']] = array( 'name' => $field_types[$field['type']]['label'] .': '. $field['widget']['label'] .' ('. $field['field_name'] .')', - 'addlfields' => $addlfields, - 'sortable' => isset($main_column['sortable']) ? $main_column['sortable'] : FALSE, 'handler' => 'content_views_field_handler', 'option' => array('#type' => 'select', '#options' => $formatters), 'content_db_info' => $db_info, 'content_field' => $field, 'content_field_module' => $module, ); - if (isset($main_column['sortable']) && $main_column['sortable']) { + if ($field['multiple']) { + $table['fields'][$main_column['column']]['notafield'] = TRUE; + $table['fields'][$main_column['column']]['sortable'] = FALSE; + } + else { + $addlfields = array(); + foreach ($columns as $column => $attributes) { + $addlfields[] = $attributes['column']; + } + $table['fields'][$main_column['column']]['addlfields'] = $addlfields; + $table['fields'][$main_column['column']]['sortable'] = isset($main_column['sortable']) ? $main_column['sortable'] : FALSE; + } + + if ($table['fields'][$main_column['column']]['sortable']) { $table['sorts'] = array(); $table['sorts'][$main_column['column']] = array( 'name' => $field_types[$field['type']]['label'] .': '. $field['widget']['label'] .' ('. $field['field_name'] .')', @@ -95,11 +102,28 @@ function content_views_field_handler($field_info, $field_data, $value, $data) { $field = $field_info['content_field']; $item = array(); - foreach ($field_info['content_db_info']['columns'] as $column => $attributes) { - $view_column_name = 'node_data_'. $field['field_name'] .'_'. $attributes['column']; - $item[$column] = $data->$view_column_name; + if ($field['multiple']) { + foreach ($field_info['content_db_info']['columns'] as $column => $attributes) { + $query_columns[] = "node_data_$field[field_name].$attributes[column] AS $column"; + } + $query = "SELECT ".implode(', ', $query_columns). + " FROM {node} node". + " LEFT JOIN {node_data_$field[field_name]} node_data_$field[field_name] ON node.vid = node_data_$field[field_name].vid". + " WHERE node.nid = ".$data->nid. + " ORDER BY node_data_$field[field_name].delta"; + $result = db_query(db_rewrite_sql($query, 'node')); + while ($item = db_fetch_array($result)) { + $item_list[] = content_format($field, $item, $field_data['options']); + } + return (count($item_list) > 1) ? theme_item_list($item_list) : $item_list[0]; + } + else { + foreach ($field_info['content_db_info']['columns'] as $column => $attributes) { + $view_column_name = 'node_data_'. $field['field_name'] .'_'. $attributes['column']; + $item[$column] = $data->$view_column_name; + } + return content_format($field, $item, $field_data['options']); } - return content_format($field, $item, $field_data['options']); } /**