2013-04-25 6 views
9

Araç türü öğelerinin bir listesi var ve bu öğeleri Sonata Admin ile gösteriyorum. Bu elemanları "durum" alanına göre filtrelemeye izin veriyorum, ancak listenin gösterilmesi durumunda sadece aktif araçların gösterilmesini ve eğer birinin aktif olmayan araçları görmek istemesi durumunda filtreyi kullanmasını ve etkin olmayan durumu seçmesini istiyorum. Birinin Sonata Admin kullanan bir öğe listesi için filtreleri varsayılan olarak uygulama yöntemini bilmesini isterim.Symfony2 - Sonata Admin öğesinin bir öğeleri listesinde varsayılan filtre verin

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

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

bu hedefe ulaşmak için configureDatagridFilters durum alanına eklenebilir herhangi bir seçenek() var mı: İşte

benim kodudur? Diğer seçenekler?

Şimdiden teşekkürler.

cevap

21

Aşağıdaki olarak $ datagridValues ​​özelliğinin yerini zorunda (statü için> 0 bir tamsayı ise):

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

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

+0

seni çok Pece ederiz !! İnternette birkaç saat bilgi arıyordum. Cevabınız için oy kullanamıyorum çünkü yeterince itibarım yok, ama cevabınızı mümkün olan en kısa sürede oylayacağım. – Airam

+0

Rica ederim! Bu yapılandırma bilgisini https://github.com/sonata-project/SonataAdminBundle/blob/master/Resources/doc/reference/advance.rst#configure-the-default-page-and-ordering-in-the adresinde buldum. -list-view – AlterPHP

+0

Siz efendim, bana bir baş ağrısı kaydettiniz! – Matheno

8

Ayrıca bu yöntemi kullanabilirsiniz

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

Yukarıdaki önerilen yaklaşımların her ikisini de kullanmak, filtreleri her zaman varsayılan bir değere göre filtrelemek zorunda bıraktığımızdan, filtreleri "sıfırla" davranışını bozacaktır. Bana göre ben iyi yaklaşım (biz orada mantığı eklemek yerine statik değerini ekleyebildiğinizden) getFilterParameters işlevini kullanın ve kullanıcı "Reset düğmesine"

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

Bu, çalışmak istemez. Değer filtremde, ancak filtre uygulanmadı. Filtreyi tıklatırsam hiçbir şey olmuyor, ancak filtreyi sıfırladığımda ve değeri seçtiğimde, –

+0

çalışmam da benim durumumda '' type '=> EqualType :: TYPE_IS_EQUAL' öğesini kaldırmak zorunda kaldım. –