Изменение заголовка ссылки в представлении для общего файла


У меня есть куча файлов, которые отображаются в представлении; я использую настройку "общие файлы" для их отображения; проблема в том, что у некоторых файлов действительно уродливые имена, такие как "1002-32-eda.pdf". Я хотел бы изменить имя на "загрузить", но сохранить обнаружение "mime" (маленький значок слева; например, pdf, word и т. Д.).

Есть ли пример того, как это изменить?

Author: Alex Weber, 2011-04-25

2 answers

Я предполагаю, что вы используете поле для сохранения данных о файлах.

Когда файл отображается в представлениях, он отображается с помощью средства форматирования, которое действует как функция темы. Различные способы отображения изображения на самом деле являются просто разными форматерами, которые ссылаются на разные функции темы (или на то же самое, но с разными аргументами).

У вас есть два варианта. * Вы можете переопределить функцию темы, которая изменит способ отображения ВСЕХ файлов, при отображении с использованием "общих файлов". * Вы можете создать свой собственный форматер и функцию темы, которая может быть копией той, которую использует 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
Author: googletorp, 2011-04-25 12:08:20

Есть еще один вариант, если вы хотите сделать это для всех файлов на сайте: создайте переопределение для функции 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
Author: MW., 2012-06-04 09:33:29