largeview.module

  1. <?php
  2. // $Id$
  3.  
  4. /**
  5.  * Stole this code from image cache, goal here is to add one more
  6.  * formatter that links to node/nid/large instead of node/nid
  7.  * and shows up in the list on Home » Administer » Content management » Content types » Display fields
  8.  */
  9.  
  10.  
  11. /**
  12.  * Implementation of hook_field_formatter_info().
  13.  * Adds image linked to large view display option.
  14.  */
  15. function largeview_field_formatter_info() {
  16.   $formatters = array();
  17.   foreach (imagecache_presets() as $preset) {
  18.     $formatters[$preset['presetname'] .'_linkedlarge'] = array(
  19.       'label' => t('@preset image linked to node large', array('@preset' => $preset['presetname'])),
  20.       'field types' => array('image', 'filefield'),
  21.     );
  22.   }
  23.   return $formatters;
  24. }
  25.  
  26. /**
  27.  * Implementation of hook_field_formatter().
  28.  */
  29. function largeview_field_formatter($field, $item, $formatter, $node) {
  30.   if (empty($item['fid']) && $field['use_default_image']) {
  31.     $item = $field['default_image'];
  32.   }
  33.   // Views does not load the file for us, while CCK display fields does.
  34.   if (empty($item['filepath'])) {
  35.     $item = array_merge($item, field_file_load($item['fid']));
  36.   }
  37.   $alt = empty($item['data']['alt']) ? '' : $item['data']['alt'];
  38.   $title = empty($item['data']['title']) ? '' : $item['data']['title'];
  39.   $parts =  explode('_', $formatter);
  40.   $style = array_pop($parts);
  41.   $presetname = implode('_', $parts);
  42.  
  43.   $class = "imagecache imagecache-$presetname imagecache-$style imagecache-$formatter";
  44.   if ($preset = imagecache_preset_by_name($presetname)) {
  45.     $item['filepath'] = $item['fid'] == 'upload' ? $item['preview'] : $item['filepath'];
  46.     switch ($style) {
  47.       case 'linkedlarge':
  48.         $imagetag = theme('largeview', $presetname, $item['filepath'], $alt, $title);
  49.         return l($imagetag, 'node/'. $node->nid . '/large', array('attributes' => array('class' => $class), 'html' => true));
  50.  
  51.       default:
  52.         return  theme('largeview', $presetname, $item['filepath'], $item['data']['alt'], $item['data']['title']);
  53.     }
  54.   }
  55.   return '<!-- imagecache formatter preset('. $presetname .') not found! -->';
  56. }
  57.  
  58. function theme_largeview_formatter($element) {
  59.   if (isset($element['#item']['nid']) && $node = node_load($element['#item']['nid'])) {
  60.     return imagecache_field_formatter($element['#field_name'], $element['#item'], $element['#formatter'], $node);
  61.   }
  62. }