Views module quirks
Jump to navigation
Jump to search
Uploaded files have all the same link
When linking in uploaded files in a view, they all share the same link. Discussion and solution at http://drupal.org/node/378724
Specific solution: replace modules\views\modules\upload\views_handler_field_upload_fid.inc with http://drupal.org/files/issues/views_handler_field_upload_fid.inc_.txt
contents of file in case it gets misplaced
// $Id: views_handler_field_upload_fid.inc,v 1.4 2009/01/30 00:01:42 merlinofchaos Exp $
/**
* Field handler to provide a list of roles.
*/
class views_handler_field_upload_fid extends views_handler_field_prerender_list {
function construct() {
parent::construct();
}
function option_definition() {
$options = parent::option_definition();
$options['link_to_file'] = array('default' => FALSE);
$options['only_listed'] = array('default' => FALSE);
return $options;
}
function options_form(&$form, &$form_state) {
parent::options_form($form, $form_state);
$form['link_to_file'] = array(
'#title' => t('Link this field to download the file'),
'#type' => 'checkbox',
'#default_value' => !empty($this->options['link_to_file']),
);
$form['only_listed'] = array(
'#title' => t('Only show "listed" file attachments'),
'#type' => 'checkbox',
'#default_value' => !empty($this->options['only_listed']),
);
}
/**
* Render whatever the data is as a link to the file.
*
* Data should be made XSS safe prior to calling this function.
*/
function render_link($data, $values) {
if (!empty($this->options['link_to_file']) && $data !== NULL && $data !== '') {
$path = file_create_url($values->filepath);
$data = l($data, $path);
}
return $data;
}
function render($values) {
$files = array();
// Support "only listed files" option.
$where = '';
if (!empty($this->options['only_listed'])) {
$where = " AND u.list <> 0";
}
$result = db_query("SELECT u.vid, u.fid, f.filepath, u.description FROM {upload} u LEFT JOIN {files} f ON f.fid = u.fid WHERE u.vid = %d $where ORDER BY u.weight", $values->{$this->field_alias});
while ($file = db_fetch_object($result)) {
$files[] = $this->render_link(check_plain($file->description), $file);
}
return implode(', ', $files);
}
}