Skip to content

Instantly share code, notes, and snippets.

@sprice
Created March 8, 2012 19:54
Show Gist options
  • Save sprice/2003047 to your computer and use it in GitHub Desktop.
Save sprice/2003047 to your computer and use it in GitHub Desktop.
Provide image field default images in Drupal 7
<?php
// General function in base feature or custom module.
/**
* Return a file object after saving a default image and storing the fid
* in a variable.
*
* @param $default_image
* An associative array containing:
* - scheme: File API stream wrapper scheme (ie: 'public://', 'private://')
* - dest_directory: The directory within the files directory the default
* image will be copied to. No leading or trailing slash.
* - source_path: The full path to the existing default image that will
* be copied.
* - file_name: The name of the default image.
* - variable: The variable name that will store the default image fid.
*
* @return
* A file object of the saved default image file.
*/
function default_image_create($default_image) {
$file_uri = $default_image['scheme'] . $default_image['dest_directory'] . '/' . $default_image['file_name'];
$full_dir = $default_image['scheme'] . $default_image['dest_directory'];
file_prepare_directory($full_dir, FILE_CREATE_DIRECTORY);
file_unmanaged_copy($default_image['source_path'], $file_uri, FILE_EXISTS_REPLACE);
$file = (object) array(
'uid' => 1,
'status' => FILE_STATUS_PERMANENT,
'filename' => $default_image['file_name'],
'uri' => $file_uri,
'filemime' => file_get_mimetype($default_image['source_path']),
);
$file = file_save($file);
if ($file) {
variable_set($default_image['variable'], $file->fid);
}
return $file;
}
// Generate default image from custom feature module .install file. Assumes
// /images directory containing default image.
/**
* Implements hook_install().
*/
function custom_install() {
$default_image = array(
'scheme' => 'public://',
'dest_directory' => 'default_images',
'source_path' => drupal_get_path('module', 'custom') . '/images/' . 'default.png',
'file_name' => 'default.png',
'variable' => 'default_image_fid',
);
$file = default_image_create($default_image);
}
/**
* Implements hook_uninstall().
*/
function custom_uninstall() {
$fid = variable_get('custom_default_image_fid', FALSE);
if ($fid) {
$file = file_load($fid);
file_delete($file, TRUE);
variable_del('custom_default_image_fid');
}
}
// Override the image field default fid in feature module .module file.
/**
* Implements hook_field_default_fields_alter().
*
* Set the default image.
*/
function custom_field_default_fields_alter(&$fields) {
if (isset($fields['node-custom-field_image']['field_config']['settings']['default_image'])) {
$fid = $fields['node-custom-field_image']['field_config']['settings']['default_image'];
$fields['node-custom-field_image']['field_config']['settings']['default_image'] = variable_get('default_image_fid', $fid);
}
}
@milesw
Copy link

milesw commented Sep 2, 2013

When using a newer version of features hook_field_default_fields_alter() will not work since the component naming has changed. Need to use a hook for either a field base or field instance.

hook_field_default_field_bases_alter() or hook_field_default_field_instances_alter()

Also, the structure of the fields array will be slightly different.

@glesage
Copy link

glesage commented Jan 16, 2014

Hey guys, I've been trying to do this with the current version of Drupal (7.26) but cannot seem to get this hook to do anything...

Where can I get info about it? Google search brings up nothing... Has the naming changed? (As suggested in previous post)?

Thanks!

@jerbob92
Copy link

@glesage This is something in Features, not Drupal core.

@milkovsky
Copy link

Thx for sharing. Some notes: this hook comes from features. E.g. it runs at /admin/structure/features

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment