2013-04-25 17 views
9

Mam listę elementów typu Pojazd i wyświetlam te elementy za pomocą Sonata Admin. Zezwalam na filtrowanie tych elementów przez pole "status", ale chcę, aby po wyświetleniu listy pokazywały się tylko aktywne pojazdy, a jeśli ktoś chce zobaczyć nieaktywne pojazdy, korzysta z filtra i wybiera nieaktywny status. Chciałbym wiedzieć, czy ktoś zna sposób stosowania filtrów domyślnie dla listy elementów przy użyciu Sonata Admin.Symfony2 - Podaj domyślny filtr na liście elementów Sonaty Admin

Oto mój kod:

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

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

Czy jest jakaś opcja, która może być dodana do pola statusu w configureDatagridFilters(), aby osiągnąć ten cel? Inne opcje?

Z góry dziękuję.

Odpowiedz

21

Trzeba zastąpić $ własności datagridValues ​​następująco (dla stanu> 0 jeżeli jest to liczba całkowita):

/** 
    * 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'. 
    ); 

źródło: Configure the default page and ordering in the list view

+0

Dziękuję bardzo PéCé !! Szukałem informacji w Internecie kilka godzin. Nie mogę głosować na twoją odpowiedź, ponieważ nie mam wystarczającej reputacji, ale zagłosuję na twoją odpowiedź tak szybko, jak to możliwe. – Airam

+0

Nie ma za co! Znalazłem te informacje konfiguracyjne na https://github.com/sonata-project/SonataAdminBundle/blob/master/Resources/doc/reference/advance.rst#configure-the-default-page-and-ordering-inhe -list-view – AlterPHP

+0

Jesteś pan, uratowałeś mi ból głowy! – Matheno

8

Można również użyć tej metody

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

Korzystanie z obu powyższych sugerowanych podejść przerwie zachowanie "resetowania" filtrów, ponieważ zawsze zmuszamy filtr do filtrowania według wartości domyślnej. Dla mnie, myślę, że najlepszym rozwiązaniem jest skorzystanie z funkcji getFilterParameters (ponieważ możemy dodać logikę tam zamiast statycznie dodać wartość) i sprawdzić, czy użytkownik kliknął przycisk „Restart”

/** 
* {@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

To nie chce działać. Wartość jest w moim filtrze, ale filtr nie jest stosowany. Jeśli kliknę przycisk "Filtr" nic się nie stanie, ale po zresetowaniu filtra, a następnie wybraniu wartości, działa –

+0

Musiałem usunąć "type" => EqualType :: TYPE_IS_EQUAL' w moim przypadku –

Powiązane problemy