2013-04-25 16 views
9

Tôi có danh sách các thành phần thuộc loại Xe và tôi hiển thị các phần tử này với Quản trị Sonata. Tôi cho phép lọc các phần tử này theo trường "trạng thái", nhưng tôi muốn điều đó, khi danh sách được hiển thị, chỉ có các xe đang hoạt động được hiển thị và nếu ai đó muốn xem các xe không hoạt động, hãy sử dụng bộ lọc và chọn trạng thái không hoạt động. Tôi muốn biết nếu có ai đó biết cách áp dụng các bộ lọc theo mặc định cho một danh sách các phần tử sử dụng Quản trị Sonata.Symfony2 - Cung cấp bộ lọc mặc định trong danh sách các phần tử của Sonata Admin

Đây là mã của tôi:

public function configureListFields(ListMapper $listMapper) 
{ 
    $listMapper 
     ->addIdentifier('name') 
     ->add('status') 
    ; 
} 

protected function configureDatagridFilters(DatagridMapper $mapper) 
{ 
    $mapper 
     ->add('name') 
     ->add('status') 
    ; 
} 

Có bất kỳ tùy chọn có thể được bổ sung vào trường trạng thái trong configureDatagridFilters() để đạt được mục tiêu này? Sự lựa chọn khác?

Xin cảm ơn trước.

Trả lời

21

Bạn cần phải ghi đè lên $ datagridValues ​​tài sản như sau (đối với tình trạng> 0 nếu nó là một số nguyên):

/** 
    * Default Datagrid values 
    * 
    * @var array 
    */ 
    protected $datagridValues = array (
      'status' => array ('type' => 2, 'value' => 0), // type 2 : > 
      '_page' => 1, // Display the first page (default = 1) 
      '_sort_order' => 'DESC', // Descendant ordering (default = 'ASC') 
      '_sort_by' => 'id' // name of the ordered field (default = the model id field, if any) 
     // the '_sort_by' key can be of the form 'mySubModel.mySubSubModel.myField'. 
    ); 

nguồn: Configure the default page and ordering in the list view

+0

Cảm ơn bạn rất nhiều PéCé !! Tôi đã tìm kiếm thông tin trên Internet vài giờ. Tôi không thể bỏ phiếu cho câu trả lời của bạn bởi vì tôi không có đủ danh tiếng, nhưng tôi sẽ bỏ phiếu cho câu trả lời của bạn càng sớm càng tốt. – Airam

+0

Bạn được chào đón! Tôi đã tìm thấy thông tin cấu hình đó tại https://github.com/sonata-project/SonataAdminBundle/blob/master/Resources/doc/reference/advance.rst#configure-the-default-page-and-ordering-in-the -list-view – AlterPHP

+0

Bạn thưa bạn, bạn đã cứu tôi đau đầu! – Matheno

8

Bạn cũng có thể sử dụng phương pháp này

public function getFilterParameters() 
    { 
     $this->datagridValues = array_merge(
      array(
       'status' => array (
        'type' => 1, 
        'value' => 0 
       ), 
       // exemple with date range 
       'updatedAt' => array(
        'type' => 1, 
        'value' => array(
         'start' => array(
          'day' => date('j'), 
          'month' => date('m'), 
          'year' => date('Y') 
          ), 
         'end' => array(
          'day' => date('j'), 
          'month' => date('m'), 
          'year' => date('Y') 
          ) 
         ), 
        ) 
       ), 
      $this->datagridValues 
      ); 

     return parent::getFilterParameters(); 
    } 
5

Sử dụng cả hai cách tiếp cận được đề xuất ở trên sẽ phá vỡ hành vi "đặt lại" bộ lọc vì chúng tôi luôn buộc bộ lọc lọc theo giá trị mặc định. Đối với tôi, tôi nghĩ rằng phương pháp tốt nhất là sử dụng getFilterParameters chức năng (vì chúng ta có thể thêm logic trong đó thay vì tĩnh thêm giá trị) và kiểm tra nếu người dùng nhấn vào nút "Reset nút"

/** 
* {@inheritdoc} 
*/ 
public function getFilterParameters() 
{ 
    // build the values array 
    if ($this->hasRequest()) { 
     $reset = $this->request->query->get('filters') === 'reset'; 

     if (!$reset) { 
      $this->datagridValues = array_merge(array(
       'status' => array (
        'type' => 1, 
        'value' => 0 
       ), 
      ), 
       $this->datagridValues 
      ); 
     } 
    } 

    return parent::getFilterParameters(); 
} 
+0

Điều này không muốn hoạt động. Giá trị nằm trong bộ lọc của tôi, nhưng bộ lọc không được áp dụng. Nếu tôi nhấp vào 'Bộ lọc' không có gì xảy ra, nhưng khi tôi đặt lại bộ lọc và sau đó chọn giá trị, nó hoạt động –

+0

Tôi đã phải loại bỏ' 'type' => EqualType :: TYPE_IS_EQUAL' trong trường hợp của tôi –