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 /

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

Displaying link to file in GridField


Go to End
Reply


2 Posts   689 Views

Avatar
zenmonkey

Community Member, 541 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, 541 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?