amilenkov's picture

Hi friends!

About using a file field and it's display settings:

Is there a module through which files uploaded via file field can be configured to open in a new window (by adding attribute "_blank" to a link to the file)? I think this is very often required by practice and such a tool is needed at the level of content type administration.

I found the solution described below looking on the Internet - by adding code in template.php - and this code works excellently, I added it directly and experimentally  in template.php of the core theme Bartik.

https://gist.github.com/olafgrabienski/960ee7e8f0b76128ce7bf12cb7d28880

The code is:

<?php

function MYTHEME_file_link($variables) {

$file = $variables['file'];

$icon_directory = $variables['icon_directory'];

$url = file_create_url($file->uri);

$icon = theme('file_icon', array('file' => ($file instanceof File) ? $file : file_load($file->fid), '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);

}

//open files of particular mime types in new window

$new_window_mimetypes = array('application/pdf', 'text/plain');

if (in_array($file->filemime, $new_window_mimetypes)) {

$options['attributes']['target'] = '_blank';

}

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

}

However, this solution is not very intuitive and easy for anyone, especially novice users of the system, and I do not know how secure and reliable it is in view of the future development of Backdrop CMS.

Comments

BWPanda's picture

I think that's the best way to do it.

I'm in the process of migrating a D7 site to Backdrop, and I had some method for doing this in D7 that wasn't ideal. So in my migration notes I have a note-to-self to:

Override theme_file_link() to open attached documents in a new window.

I haven't done it yet, but it'll be similar to yours and olafgrabienski's code. Don't think there's a better way...

BWPanda's picture

Just realised another way to do this would be to use Javascript to add target="_blank" to appropriate links.

This is how the External Links module does it.