2015-03-04 2 views
2

Silverstripe DataObject - Я хочу добавить привязку перетаскивания к текущему классу, который расширяет объект данных, как то, что существует для страниц. Поэтому при отбрасывании он обновляет поле OrderBy для всех объектов данных в этом представлении. Я создал класс и могу свободно редактировать один элемент за раз, но простое упорядочивание перетаскивания сделает его намного проще, но я не вижу таких расширений в настоящее время в Dataobjects только на страницах.Silverstripe DataObject - упорядочение перетаскивания

ответ

5

В SilverStripe 3.1 есть несколько отличных модулей, которые предоставляют вам такую ​​функциональность. Два из этих модулей: SortableGridField и GridFieldExtensions.

Чтобы получить эту работу, вам необходимо установить один из этих модулей, добавить поле сортировки в свой собственный класс DataObject и добавить компонент объекта сортировки модуля в GridFieldConfig.

SortableGridField

Модуль SortableGridField специально, чтобы обеспечить функциональные возможности для сортировки объектов на GridField.

Чтобы получить эту работу, вам необходимо добавить поле сортировки в свой собственный класс DataObject и добавить GridFieldSortableRows() в качестве компонента для вашего GridField.

В следующих примерах я буду использовать HomePage как страницу с отношением has_many к объекту DataObject Slide.

Slide

class Slide extends DataObject 
{ 
    private static $db = array (
     'Title' => 'HTMLText', 
     'SortOrder' => 'Int' 
    ); 

    private static $has_one = array (
     'HomePage' => 'HomePage' 
    ); 

    private static $summary_fields = array( 
     'Title' => 'Title' 
    ); 

    private static $default_sort = 'SortOrder ASC'; 
    private static $singular_name = 'Slide'; 
    private static $plural_name = 'Slides'; 

    public function getCMSFields() 
    { 
     $fields = parent::getCMSFields(); 

     $fields->removeByName('SortOrder'); 

     return $fields; 
    } 

} 

HomePage

class HomePage extends Page { 

    private static $has_many = array (
     'Slides' => 'Slide' 
    ); 

    public function getCMSFields() 
    { 
     $fields = parent::getCMSFields(); 

     $slidesFieldConfig = GridFieldConfig_RecordEditor::create(); 
     $slidesFieldConfig->addComponent(new GridFieldSortableRows('SortOrder')); 

     $slidesField = GridField::create(
      'Slides', 
      'Slide', 
      $this->Slides(), 
      $slidesFieldConfig 
     ); 
     $fields->addFieldToTab('Root.Slides', $slidesField); 

     return $fields; 
    } 

} 

GridFieldExtensions

Модуль GridFieldExtensions содержит GridFieldOrderableRows контролировать порядок сортировки на GridField, так же, как SortableGridField модуль. Он также имеет другие полезные инструменты GridField.

Чтобы получить эту работу, вам необходимо добавить поле сортировки в свой собственный класс DataObject и добавить GridFieldOrderableRows() в качестве компонента для вашего GridField.

Ваш код будет так же, как выше примере, за исключением компонента, который вы добавляете в GridFieldConfig является GridFieldOrderableRows:

public function getCMSFields() 
    { 
     $fields = parent::getCMSFields(); 

     $slidesFieldConfig = GridFieldConfig_RecordEditor::create(); 
     $slidesFieldConfig->addComponent(new GridFieldOrderableRows('SortOrder')); 

     ... 
    } 
+1

вы бьете меня это 3dgoo! Сортируемый модуль GridField - это то, что вам нужно после: – Cam

Смежные вопросы