2013-04-25 7 views
9

Ich habe eine Liste von Elementen des Typs Fahrzeug und ich zeige diese Elemente mit Sonata Admin. Ich erlaube, diese Elemente durch das "Status" -Feld zu filtern, aber ich möchte, dass wenn die Liste angezeigt wird, nur die aktiven Fahrzeuge angezeigt werden, und wenn jemand die inaktiven Fahrzeuge sehen möchte, verwendet den Filter und wählt den inaktiven Status aus. Ich würde gerne wissen, ob jemand den Weg kennt, Filter standardmäßig für eine Liste von Elementen mit Sonata Admin anzuwenden.Symfony2 - Geben Sie einen Standardfilter in einer Liste von Elementen von Sonata Admin

Hier ist mein Code:

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

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

Gibt es eine Option, die in configureDatagridFilters zum Statusfeld hinzugefügt werden kann(), dieses Ziel zu erreichen? Andere Optionen?

Vielen Dank im Voraus.

Antwort

21

Sie müssen $ datagridValues ​​Eigenschaft wie folgt außer Kraft setzen (für Status> 0, wenn es eine ganze Zahl):

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

Quelle: Configure the default page and ordering in the list view

+0

Vielen Dank Pece !! Ich hatte mehrere Stunden lang im Internet nach Informationen gesucht. Ich kann nicht für Ihre Antwort stimmen, weil ich nicht genügend Reputation habe, aber ich werde Ihre Antwort so schnell wie möglich abstimmen. – Airam

+0

Gern geschehen! Ich hatte diese Konfigurationsinformationen unter https://github.com/sonata-project/SonataAdminBundle/blob/master/Resources/doc/reference/advance.rst#configure-the-default-page-and-ordering-in-the gefunden -list-view – AlterPHP

+0

Sie Sir, Sie haben mir Kopfschmerzen erspart! – Matheno

8

Sie können auch diese Methode verwenden

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

Die Verwendung der beiden oben vorgeschlagenen Ansätze wird das Verhalten des Filters "zurücksetzen" unterbrechen, da wir den Filter immer zwingen, nach einem Standardwert zu filtern. Für mich, ich denke, der beste Ansatz ist es, die getFilterParameters Funktion zu verwenden und überprüfen, ob der Benutzer geklickt hat die „Reset-Taste“

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

Das will nicht funktionieren. Der Wert ist in meinem Filter, aber der Filter wird nicht angewendet. Wenn ich auf "Filter" klicke, passiert nichts, aber wenn ich den Filter zurücksetze und dann den Wert wähle, funktioniert es. –

+0

Ich musste "type" => EqualType :: TYPE_IS_EQUAL' in meinem Fall entfernen –