わかりました、これが作業コードです。
Mediaモジュールはhook_file_formatter_info()
、画像をレンダリングするためのコールバックを設定するために実装されます。
Drupalの方法と同様にhook_file_formatter_info_alter()
、デフォルトの動作を変更する方法があります。そこで、file_entity.moduleからデフォルトのコールバックを取得し、それをカスタムモジュールに複製しました。次に、これをオルターに配線しました。私のカスタムコールバックには、画像のスタイルをチェックし、要素をリンクでラップする追加のロジックがあります。
唯一の本当の癖は、のデフォルトの実装がtheme_link()
リーフ要素であると想定しているため、最初にイメージ要素をレンダリングする必要があるということです。
補足として、これは画像にalt / titleテキストを取得する方法でもあり、デフォルトではありません。
function MYMODULE_file_formatter_info_alter(&$info) {
if (!empty($info['file_image'])) {
$info['file_image']['view callback'] = 'MYMODULE_file_formatter_file_image_view';
}
}
function MYMODULE_file_formatter_file_image_view($file, $display, $langcode) {
// Prevent PHP notices when trying to read empty files.
// @see http://drupal.org/node/681042
if (!$file->filesize) {
return;
}
// Do not bother proceeding if this file does not have an image mime type.
if (strpos($file->filemime, 'image/') !== 0) {
return;
}
if (file_entity_file_is_local($file) && $image = image_load($file->uri)) {
if (!empty($display['settings']['image_style'])) {
$element = array(
'#theme' => 'image_style',
'#style_name' => $display['settings']['image_style'],
'#path' => $file->uri,
'#width' => $image->info['width'],
'#height' => $image->info['height'],
);
if ($display['settings']['image_style'] == 'MYSTYLE') {
$element = array(
'#theme' => 'link',
'#text' => drupal_render($element),
'#path' => 'media/' . $file->fid,
'#options' => array(
'attributes' => array(),
'html' => TRUE,
),
);
}
else {
}
}
else {
$element = array(
'#theme' => 'image',
'#path' => $file->uri,
'#width' => $image->info['width'],
'#height' => $image->info['height'],
);
}
return $element;
}
}
hook_field_attach_view_alter()
か?