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.

General Questions /

General questions about getting started with SilverStripe that don't fit in any of the categories above.

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

SS3 GridFieldSortableRows() module


Go to End
Reply


2 Posts   871 Views

Avatar
merrick_sd

Community Member, 97 Posts

12 January 2013 at 1:23am

does anyone know if this module can work with Model admin.

works if i attach it to on Page class in cms fields

eg:

 // Create a default configuration for the new GridField, allowing record editing
		$config = GridFieldConfig_RelationEditor::create();
		$config->addComponent(new GridFieldSortableRows('SortOrder')); 
		$config->addComponent(new GridFieldBulkEditingTools());
		//$config->addComponent(new GridFieldBulkImageUpload());   
		// Create a gridfield to hold the student relationship   
		$columnField = new GridField(
		           'Banners', // Field name
		           'Banner', // Field title
		           Banner::get()->sort("SortOrder"), // List of all related students
		           $config
		       );     
		       // Create a tab named "Students" and add our field to it
		$fields->addFieldToTab('Root.Banners', $columnField); 
		

but if i wanted it in model admin

eg BannerAdmin

class BannerAdmin extends ModelAdmin {
 
	public static $managed_models = array(
'Banner',
	);
 
static $url_segment = 'Banners'; // will be linked as /admin/products
	static $menu_title = 'Banners';
 
}

Avatar
copernican

Community Member, 189 Posts

12 January 2013 at 2:29am

Hi Merrick

This is untested code but there's no reason it shouldn't work. You'll want to override the getEditForm() function in ModelAdmin.php. So in your BannerAdmin class:

class BannerAdmin extends ModelAdmin {

   public static $managed_models = array(
'Banner',
   );

static $url_segment = 'Banners'; // will be linked as /admin/products
   static $menu_title = 'Banners';

function getEditForm($id = null, $fields = null) {
		$list = $this->getList();
		$exportButton = new GridFieldExportButton('before');
		$exportButton->setExportColumns($this->getExportFields());
		$listField = GridField::create(
			$this->modelClass,
			false,
			$list,
			$fieldConfig = GridFieldConfig_RecordEditor::create($this->stat('page_length'))
				->addComponent($exportButton)
				->removeComponentsByType('GridFieldFilterHeader')
				->addComponents(new GridFieldPrintButton('before'))
		                ->addComponent(new GridFieldSortableRows('SortOrder')) //add your extra components here
		);

		// Validation
		if(singleton($this->modelClass)->hasMethod('getCMSValidator')) {
			$detailValidator = singleton($this->modelClass)->getCMSValidator();
			$listField->getConfig()->getComponentByType('GridFieldDetailForm')->setValidator($detailValidator);
		}

		$form = new Form(
			$this,
			'EditForm',
			new FieldList($listField),
			new FieldList()
		);
		$form->addExtraClass('cms-edit-form cms-panel-padded center');
		$form->setTemplate($this->getTemplatesWithSuffix('_EditForm'));
		$form->setFormAction(Controller::join_links($this->Link($this->modelClass), 'EditForm'));
		$form->setAttribute('data-pjax-fragment', 'CurrentForm');

		$this->extend('updateEditForm', $form);
		
		return $form;
	}

}