it-swarm-eu.dev

Změna názvu odkazu v zobrazení pro obecný soubor

Mám spoustu souborů, které jsou zobrazeny v pohledu; Používám nastavení 'obecné soubory' k jejich zobrazení; problém je v tom, že některé soubory mají opravdu ošklivá jména, například „1002-32-eda.pdf“. Chtěl bych změnit název na „stáhnout“, ale ponechat detekci „mime“ (malá ikona na levé straně; jako pdf, Slovo atd.).

Nějaký příklad, jak to změnit?

5
Disco

Hádám, že pro ukládání dat o souborech používáte pole.

Když je soubor zobrazen v pohledech, je zobrazen pomocí formátoru, který funguje jako funkce motivu. Různé způsoby, jak může být obrázek zobrazen, jsou ve skutečnosti jen různé formátory, které odkazují na různé tematické funkce (nebo stejné, ale s různými argumenty).

Máte dvě možnosti. * Můžete přepsat funkci motivu, která by při zobrazení pomocí „obecných souborů“ změnila způsob zobrazení VŠECHNY soubory. * Můžete si vytvořit svůj vlastní formátovač a funkci motivu, která by mohla být kopií jednoho Generic files používá, ale s několika změnami.

Háčky, které potřebujete použít, závisí na verzi Drupal, kterou používáte), ale můžete prohledávat moduly a kopírovat, jak se to dělá pro Generic files.

Pro dlouhé vysvětlení si můžete prohlédnout toto blogový příspěvek Napsal jsem chvíli zpátky.

Krátká verze je:

použijte 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.'),
    ),
  );
}

Dále použijte hook_theme a vytvořte funkci motivu s háčkem jako jméno:

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

Nakonec vytvořte funkci motivu

/**
 * 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;
}

Výše uvedený kód by měl fungovat a dělat, co chcete, ale ve skutečnosti to netestoval.

5
googletorp

Existuje další možnost, pokud to chcete udělat pro všechny soubory na webu: vytvořit přepsání funkce theme_file_link (nalezeno v souboru 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>';
} 

Nevýhodou je, že všechny odkazy na soubory na webu budou nyní vypadat jinak, ale v některých případech je to přesně to, po čem jste. Nezapomeňte následně vyprázdnit všechny mezipaměti, aby to všechno fungovalo :)

3
MW.