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've moved the forum!

Please use forum.silverstripe.org for any new questions (announcement).
The forum archive will stick around, but will be read only.

You can also use our Slack channel or StackOverflow to ask for help.
Check out our community overview for more options to contribute.

Form Questions /

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

Displaying link to file in GridField


Go to End


2 Posts   1280 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?