web-dev-qa-db-ja.com

汎用ファイルのビューのリンクタイトルを変更する

ビューに表示されるファイルの束があります。それらを表示するために「汎用ファイル」設定を使用しています。問題は、いくつかのファイルが「1002-32-eda.pdf」のような本当に醜い名前を持っていることです。名前を「ダウンロード」に変更しますが、「MIME」の検出を維持します(左側の小さなアイコン。PDFのように、単語など)。

これを変更する方法の例はありますか?

5
Disco

ファイルに関するデータを保存するためにフィールドを使用していると思います。

ファイルがビューに表示されるとき、テーマ機能のように機能するフォーマッターを介して表示されます。画像を表示するさまざまな方法は、実際には、異なるテーマ関数にリンクする異なるフォーマッター(または同じですが、異なる引数を持つ)です。

2つのオプションがあります。 *「汎用ファイル」を使用して表示する場合、すべてのファイルの表示方法を変更するテーマ機能をオーバーライドできます。 *独自のフォーマッターとGeneric filesが使用するもののコピーであるテーマ関数を作成できますが、いくつかの変更が必要です。

使用する必要のあるフックは、使用するDrupalのバージョンによって異なりますが、モジュールを検索して、Generic filesの処理方法をコピーできます。

長い説明については、これをチェックしてください ブログ投稿 しばらく前に書きました。

短いバージョンは次のとおりです。

hook_field_formatter_infoを使用します。

/**
 * Implementation of CCK's hook_field_formatter_info().
 */
function module_formatter_info() {
  return array(
    'default' => array(
      'label' => t('My generic files'),
      'field types' => array('filefield'),
      'multiple values' => CONTENT_HANDLE_CORE,
      'description' => t('My description.'),
    ),
  );
}

次に、hook_themeを使用して、フックのような名前のテーマ関数を作成します。

function filefield_theme() {
  return array(
    'module_formatter_default' => array(
      'arguments' => array('element' => NULL),
    ),
  );
}

最後にテーマ関数を作成します

/**
 * Theme function for the 'default' filefield formatter.
 */
function theme_module_formatter_default($element) {
  $file = $element['#item'];
  $file['data']['description'] = t('Download');
  $field = content_fields($element['#field_name']);
  $output = theme('filefield_item', $file, $field);
  return $output;
}

上記のコードは機能し、あなたが望むことを行うはずですが、実際にはこれをテストしていません。

5
googletorp

これをサイト上のすべてのファイルに対して実行する場合は、別のオプションがあります。関数theme_file_linkのオーバーライドを作成します(ファイルfile.moduleにあります):

function THEMENAME_file_link($variables) {
  $file = $variables['file'];
  $icon_directory = $variables['icon_directory'];

  $url = file_create_url($file->uri);
  $icon = theme('file_icon', array('file' => $file, 'icon_directory' => $icon_directory));

  // Set options as per anchor format described at
  // http://microformats.org/wiki/file-format-examples
  $options = array(
    'attributes' => array(
      'type' => $file->filemime . '; length=' . $file->filesize,
    ),
  );

  // Use the description as the link text if available.
  if (empty($file->description)) {
    $link_text = $file->filename;
  }
  else {
    $link_text = $file->description;
    $options['attributes']['title'] = check_plain($file->filename);
  }

  // DO SOMETHING WITH THE LINK TEXT HERE, FOR EXAMPLE:
  // $link_text = urldecode($link_text);

  return '<span class="file">' . $icon . ' ' . l($link_text, $url, $options) . '</span>';
} 

欠点は、サイト上のすべてのファイルリンクが異なるように見えることですが、場合によっては、それが目的のとおりである場合もあります。後ですべてのキャッシュをフラッシュして、すべてが機能するようにしてください:)

3
MW.