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); } }