Seltsames Verhalten: Bild Feld in Field collection generiert keine neuen Styles

Für die Slideshow auf einer Kundenwebseite habe ich einen Inhaltstyp "Slideshow" angelegt und mit einer Field collection bestückt. Die Field collection besteht aus einem Titel-, einem Upload-Feld (für das Bild) und einem Linkziel. Von den Bilder habe ich zwei Stile angelegt "slideshow" und "sildeshow_thumb" - unschwer zu erraten handelt es sich bei letzerem Stil um ein Vorschaubild was sich im unteren rechten Eck der Slideshow als Slideshow-Navigation befindet.

Nun hat sich herausgestellt, dass sich die Bilder recht seltsam verhalten: Wird bei einer vorhandenen Slideshow ein oder mehrere Bilder ausgetauscht, werden die Styles zwar gelöscht, aber keine neuen generiert. Dieses Problem betrifft scheinbar nur aktualisierte Slideshow also generell Field collection Felder mit Bildern, die aktualisiert werden. Neu angelegte Slideshows produzieren den Fehler nicht.

Der Workaround

Das Problem scheint bekannt zu sein, zumindest existieren einige Meldungen auf drupal.org. Ich habe mir einen kleinen Workaround geschaffen, der bei der Aktualisierung einer Node die dort enthaltenen Field collections läd, dort wiederum nach Bild-Feldern sucht und für diese die benötigten Styles neu generiert.

Hier der Code:

function example_node_update($node) {
  // Suche alle Field collections
  $field_collction = field_get_items('node', $node, 'field_slideshow');
  $fieldcollectionids = array();

  foreach ($field_collection as $key => $value) {
    $fieldcollectionids[] = $value['value'];
  }

  // Lade alle Field collections
  $items = field_collection_item_load_multiple($fieldcollectionids);

  foreach ($items as $item) {

    $image_item = field_get_items('field_collection_item', $item, 'field_start_bild');

    // Lade die zugehörige Datei.
    $file = file_load($image_item[0]['fid']);

    // Erzeuge ein Array der benötigten Image styles
    $image_styles = array('slideshow', 'slideshow_thumb');

    foreach ($image_styles as $style_name) {
        // Pfad der neuen Bilder holen
        $derivative_uri = image_style_path($style_name, $file->uri);

        // Bilder erzeugen
        image_style_create_derivative(image_style_load($style_name), $file->uri, $derivative_uri);
    }
  }
}