? media-1038962.patch
Index: media.fields.inc
===================================================================
RCS file: /cvs/drupal/contributions/modules/media/media.fields.inc,v
retrieving revision 1.25
diff -u -p -r1.25 media.fields.inc
--- media.fields.inc	14 Jan 2011 23:30:22 -0000	1.25
+++ media.fields.inc	31 Jan 2011 04:57:24 -0000
@@ -73,10 +73,57 @@ function media_field_formatter_info() {
     'field types' => array('file'),
   );
   
+  $formatters['media_single_image'] = array(
+    'label' => t('Single Image'),
+    'field types' => array('image', 'media'),
+    'settings' => array(
+      'style' => 'thumbnail',
+      'link_to_node' => 1,
+    ),
+    'description' => t('Display the first value of a multi-value image field.'),
+  );
+  
   return $formatters;
 }
 
 /**
+ * Implements hook_field_formatter_settings_form().
+ */
+function media_field_formatter_settings_form($field, $instance, $view_mode) {
+  $settings = $instance['display'][$view_mode]['settings'];
+
+  $form = array();
+  $options = array(t('None'),);
+  // get a list of all style names for our form options
+  foreach (image_styles() as $id => $style) {
+    $options[$id] = $id;
+  }
+  $form['style'] = array(
+    '#type' => 'select',
+    '#title' => t('Image Style'),
+    '#options' => $options,
+    '#default_value' => $settings['style'],
+    '#description' => t('Select the imagecache style you would like to display.'),
+  );
+  $form['link_to_node'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Link image to node'),
+    '#default_value' => $settings['link_to_node'],
+  );
+  return $form;
+}
+
+/**
+ * Implements hook_field_formatter_settings_summary().
+ */
+function media_field_formatter_settings_summary($field, $instance, $view_mode) {
+  $settings = $instance['display'][$view_mode]['settings'];
+  $summary[] = t('Image style: @value', array('@value' => $settings['style']));
+  $summary[] = !empty($settings['link_to_node'])?t('Linking to node'):t('Not linking to node');
+  return implode ('<br />', $summary);
+}
+
+/**
  * Used to Implement hook_field_view_modes().
  */
 function media_field_view_modes($obj_type) {
@@ -152,6 +199,30 @@ function media_field_formatter_view($ent
     return $element;
   }
   
+  // Display the first image only (useful for teasers)
+  if ($display['type'] == 'media_single_image') {
+    if(empty($items)){
+      return;
+    }
+    $item = (array) $items[0];
+    $item['alt'] = !empty($item['alt']) ? check_plain($item['alt']) : $entity->title;
+    $item['title'] = $entity->title;
+    $element[0] = array(
+      '#theme' => 'image_formatter',
+      '#item' => $item,
+      '#image_style' => strtolower($display['settings']['size']),
+    );
+    if(!empty($display['settings']['link_to_node']) && !empty($entity->nid)){
+      $element[0]['#path'] = array(
+        'path' => 'node/' . $entity->nid, 
+        'options' => array(
+          'attributes' => array('title' => $entity->title)
+        )
+      );
+    }
+    return $element;
+  }
+  
   // The rest of this hook invocation is for rendering media when it is attached
   // as a field to other entities.  The formatter on the media field is equivilent
   // to the media view_mode.  So if someone configures a media field on a node
