-
-
Save sprice/2003047 to your computer and use it in GitHub Desktop.
<?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); | |
} | |
} |
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.
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!
@glesage This is something in Features, not Drupal core.
Thx for sharing. Some notes: this hook comes from features. E.g. it runs at /admin/structure/features
Nice work... there's a similar approach outlined on this issue: http://drupal.org/node/1439136 but the above worked without as many bugs.
I did replace ['node-custom-field_image']['field_config']['settings']['default_image'] with ['node-custom-field_image']['field_instance']['settings']['default_image'] for more reliable results.