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.

We're retiring the forums!

The SilverStripe forums have passed their heyday. They'll stick around, but will be read only. We'd encourage you to get involved in the community via the following channels instead:

Form Questions /

Moderators: martimiz, Sean, Ed, biapar, Willr, Ingo, swaiba

Displaying link to file in GridField


Go to End


2 Posts   987 Views

Avatar
zenmonkey

Community Member, 545 Posts

20 February 2013 at 9:48am

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

Community Member, 545 Posts

21 February 2013 at 8:02am

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?