Skip to main content

This site requires you to update your browser. Your browsing experience maybe affected by not having the most up to date version.

Form Questions

Displaying link to file in GridField


Reply

2 Posts   471 Views

Avatar
zenmonkey

20 February 2013 at 9:48am Community Member, 528 Posts

I have a GridField diplaying as $has_many realtion with files, I'm tryin to add a column with a link to the file. I thought I'd be able to do it setFieldFormatting but at that level it seems to only have access the page object even though is I remove it, the gridfield does show the $Filename

   public function FileForm(){
      
      $config = GridFieldConfig_Base::create();
      
      
      
      $fileField = new GridField("Files", "Documents", $this->Files(), $config);
      
      
      $dataColumns = $fileField->getConfig()->getComponentByType('GridFieldDataColumns');
      
      $dataColumns->setDisplayFields(array(
         'Select' => 'Select',
         'Title' => 'Title',
         'Description' => 'Description',
         'Size' => 'Size',
         'LastEdited' => 'Changed',
         'Filename'=> 'Download'
      ));

      
      
      $dataColumns->setFieldFormatting(array(
         "Filename" => "<a href=/'$Filename/'>Download</a>"
      ));
      
      $fields = new FieldList (
         $fileField
      );
      
      $actions = new FieldList(FormAction::create("doEmail")->setTitle("Send Files"));
      
      return new Form($this, "FileForm", $fields, $actions);
   }   

Avatar
zenmonkey

21 February 2013 at 8:02am Community Member, 528 Posts

I've gotten a little farther using a new GridField Componant

class GridFieldDownloadButton implements GridField_ColumnProvider {
   
   public function augmentColumns($field, &$cols) {
      if(!in_array('Download', $cols)) $cols[] = 'Download';
   }
   
   public function getColumnsHandled($field) {
      return array('Download');
   }
   
   public function getColumnContent($field, $record, $col) {
      if($record->canView()) {
         $data = new ArrayData(array(
            'Link' => $record->Filename
         ));
         return $data->renderWith('GridFieldDowloadButton');
      }
   }
   
   public function getColumnAttributes($field, $record, $col) {
      return array('class' => 'col-link');
   }

   public function getColumnMetadata($gridField, $col) {
      return array('title' => "Link to File", 'sortable' => false);
   }

   
}

But the column renders as sortable with a blank Title

Any suggestions?