web-dev-qa-db-ja.com

画像フィールドのマークアップを調整するにはどうすればよいですか?

コンテンツにリンクするように設定された画像フィールドがあります。 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を追加したいと思います。

これを行う最善の方法は何でしょうか?私が試してみました:

  1. マークアップをフィールド--myfield.tpl.phpに入れて変数を挿入しますが、$items配列では、クリーンな画像ファイルやターゲットURLが提供されません。

  2. カスタムフォーマッタ モジュールを使用していますが、何らかの理由でAJAXエラーが発生し、それでもジョブが実行されるかどうか不明です。

  3. Template.phpで前処理関数を使用することもできますが、その方法は確かです。

2
pushka

リンクについては、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;
}
1
Nikit