コンテンツにリンクするように設定された画像フィールドがあります。 Drupalはこのマークアップを作成します:
<a href="/content-page">
<img src="http://mysite/sites/default/files/image.jpg">
</a>
次に、マークアップを微調整し、いくつかのスタイルを追加する必要があります。次に例を示します。
<a href="/content-page" style="border-style: none !important;">
<img src="http://mysite/sites/default/files/image.jpg" style="border: none; outline: none;">
</a>
このページはメール送信用なので、このようにインラインCSSを追加したいと思います。
これを行う最善の方法は何でしょうか?私が試してみました:
マークアップをフィールド--myfield.tpl.phpに入れて変数を挿入しますが、$items
配列では、クリーンな画像ファイルやターゲットURLが提供されません。
カスタムフォーマッタ モジュールを使用していますが、何らかの理由でAJAXエラーが発生し、それでもジョブが実行されるかどうか不明です。
Template.phpで前処理関数を使用することもできますが、その方法は確かです。
リンクについては、field--myfield.tpl.phpで簡単に指定できます。
$items[0]['#path']['options']['attributes'] = array('style'=>'border-style: none !important;');
しかし、画像にはこれがないため、上部のコードを見落として、template.phpのフォーマッターを書き換えることができます(そこに属性を追加します)。
/**
* Returns HTML for an image field formatter.
*
* @param $variables
* An associative array containing:
* - item: An array of image data.
* - image_style: An optional image style.
* - path: An array containing the link 'path' and link 'options'.
*
* @ingroup themeable
*/
function YOURTHEMENAME_image_formatter($variables) {
$item = $variables['item'];
$image = array(
'path' => $item['uri'],
'alt' => $item['alt'],
);
// Do not output an empty 'title' attribute.
if (drupal_strlen($item['title']) > 0) {
$image['title'] = $item['title'];
}
if ($variables['image_style']) {
$image['style_name'] = $variables['image_style'];
$output = theme('image_style', $image); // Here you should add attribute, check that it's your field.
}
else {
$output = theme('image', $image);
}
if (!empty($variables['path']['path'])) {
$path = $variables['path']['path'];
$options = $variables['path']['options'];
// When displaying an image inside a link, the html option must be TRUE.
$options['html'] = TRUE;
$output = l($output, $path, $options); // Here you should add attribute, check that it's your field. Or just take upper code.
}
return $output;
}