Fix for Change the ImageCache presets used to display an ImageField in node teaser according to a Taxonomy field

  1. /**
  2.  * Change the ImageCache presets used to display an ImageField in node teaser according to a Taxonomy field.
  3.  * The change is made in an implementation of hook_nodeapi()
  4.  * A term is used to trigger preset changes. The trigger is identified by a specific synonym.
  5.  */
  6.  
  7. //Define some value used in the code for clarity
  8. define(MYMODULE_TYPE, 'page');
  9. define(MYMODULE_IMAGECACHE_TRIGGER, 'trigger');
  10. define(MYMODULE_IMAGECACHE_ORIGINAL_PRESET, 'new');
  11. define(MYMODULE_IMAGECACHE_NEW_PRESET, 'old');
  12. define(MYMODULE_FIELD_IMAGE, 'field_image');
  13. define(MYMODULE_FIELD_TAXONOMY, 'field_taxo');
  14.  
  15. function mymodule_nodeapi( & $node, $op, $teaser = NULL, $page = NULL) {
  16.   if ($op === 'view' && $teaser && $node->type === MYMODULE_TYPE) {
  17.     //Get the trigger term
  18.     $term = taxonomy_get_synonym_root(MYMODULE_IMAGECACHE_TRIGGER);
  19.     //Test to see if the IC preset must be changed
  20.     if ($term && $node->{MYMODULE_FIELD_TAXONOMY}[0]['value'] == $term->tid) {
  21.         $item = $node->content[MYMODULE_IMAGEFIELD]['field']['items'][0];
  22.         $item['#theme'] = str_replace(MYMODULE_IMAGECACHE_ORIGINAL_PRESET, MYMODULE_IMAGECACHE_NEW_PRESET, $item['#theme']);
  23.         $item['#formatter'] = str_replace(MYMODULE_IMAGECACHE_ORIGINAL_PRESET, MYMODULE_IMAGECACHE_NEW_PRESET, $item['#formatter']);
  24.         $node->content['field_padimage']['field']['items'][0] = $item;
  25.     }
  26.   }
  27. }

Submit Fix

Any tags you'd like to associate with your code, delimitered by commas (example: Views, CCK, Module, etc).
Select the syntax highlighting mode to use.