Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony]Personalizacja filtrów w panelu admina
Forum PHP.pl > Forum > PHP > Frameworki
athabus
Witam,
Mój problem dotyczy symfony 1.4 i panelu admina.
Chciałbym troszeczkę zmienić filtry np. mam pole payment type, które przechowuje cyfrę oznaczającą dany sposób płatności np. 1 gotówka, 2 karta kredytowa itp.

Domyślnie filtry generowane dla widoku zawierają pole typu input text, chciałbym natomiast zmienić je na pole typu select.

  1.  
  2. class UserOrderFormFilter extends BaseUserOrderFormFilter
  3. {
  4. public function configure()
  5. {
  6. $ws=$this->widgetSchema;
  7. $ws['payment_status']=new sfWidgetFormSelect(array('choices'=>Option::getPossibleNames('payment_status')));
  8. $this->validatorSchema['payment_status']=new sfValidatorPass();
  9. }
  10. }


Kod działa połowicznie - tj. zmieniam payment_status na selecta z odpowiednimi wartościami. Filtrowanie jednak nie działa - dane nie są filtrowane - pole jest zupełnie ignorowane.

Jak zatem prawidłowo ustawić nowy filtr?

Będę wdzięczny za podpowiedzi.
Crozin
1) Rozważyłeś użycie typu ENUM zamiast liczbowego?
2) Czy Option::getPossibleNames('payment_status') zwraca tablicę w postaci:
Kod
Array (
  [1] => 'Gotówka',
  [2] => 'Karta kredytowa',
  ...
)

3) Jak rozumiem walidator "Pass" jest tylko chwilowy?
athabus
Dzięki za zainteresowanie tematem. Odpowiadając na Twoje pytania:
ad 1) Propel zdaje się nie wspiera obecnie pól typu enum (chociaż mogę się mylić, bo dawno już nie czytałem dokumentacji).
ad 2) Tak dokładnie taką tablicę zwraca - jest to moja klasa do obsługi statusów konfigurowanych w plikach konfiguracyjnych.
ad 3) Tak tylko chwilowo na fazę testów.

Dodatkowo dodam, że po przesłaniu filtra z wybraną płatnością np. kartą, po odświeżeniu strony w filtrze nadal wybrana jest karta (czyli działa poprawnie) - "jedyne" co dzieje się źle, to to, że lista zamówień nie jest filtrowana zgodnie z wyborem.
arecki
Nie wiem czy to pomoże ale ja kiedyś też miałem podobny problem. Spróbuj dodać do filtra tą funkcję a powinno zadziałać.
  1.  
  2. /**
  3.  * filtrowanie przy użyciu Propel'a
  4.  */
  5. protected function addPaymentStatusColumnCriteria(Criteria $criteria, $field, $values)
  6. {
  7. if ($q = $values['text'])
  8. {
  9. $criteria->add ('payment_status', $q);
  10. }
  11. }
  12.  


  1.  
  2. /**
  3.  * filtrowanie przy użyciu Doctrine'a
  4.  */
  5. protected function addPaymentStatusColumnQuery(Doctrine_Query $query, $field, $values)
  6. {
  7. if ($q = $values['text'])
  8. {
  9. $query->addWhere($this->getRootAlias().'.payment_status = \''.$q.'\'');
  10. }
  11. }
athabus
Dzięki Ci dobry człowieku. To rozwiązuje mój problem.
Mogli by to dać w dokumentacji, bo walczyłem z tym godzinę próbując różnych rozwiązań z forum symfony.
Wave
Cytat(athabus @ 16.06.2010, 15:34:55 ) *
  1.  
  2. class UserOrderFormFilter extends BaseUserOrderFormFilter
  3. {
  4. public function configure()
  5. {
  6. $ws=$this->widgetSchema;
  7. $ws['payment_status']=new sfWidgetFormSelect(array('choices'=>Option::getPossibleNames('payment_status')));
  8. $this->validatorSchema['payment_status']=new sfValidatorPass();
  9. }
  10. }


W jakim pliku dodać ten kod? Gdzie jest klasa Option?
destroyerr
Kod należy dodać w pliku zawierającym, podaną klasę. Może się to u Ciebie różnić, szczegółów nie podam ponieważ nie znamy Twojej aplikacji.
Klasa Option najprawdopodobniej jest gdzieś w Poznaniu pod Poznaniem, konkretniej to u athabus'a

@down: athabus - wybacz tą nieprecyzyjność. Jestem gotów poddać się karze.
athabus
destroyerr - niestety udzielasz nieprecyzyjnych informacji - niedawno wyprowadziłem się pod miasto, ale jeszcze nie zaktualizowałem profilu ;-)

Ale tak serio to klasa Option to faktycznie moja klasa, która służy do obsługi "mini tabel" - czyli wszystkich statusów, stanów i innych rzeczy, które zazwyczaj definiuje się w każdej aplikacji. Po prostu obsługuje ona te statusy/opcje definiowane w pliku konfiguracyjnym. W tym konkretnym przypadku zwraca ona tablicę typu:
{1=>'gotówka', 2=>'karta kredytowa ...}, której wymaga widget select.

Sam kody, który podałem ja i później arecki należy umieścić w odpowiedniej klasie definiującej formularz filtru, który chcesz zmienić. Podaj konkretnie z czym walczysz to powiemy Ci co z tym zrobić.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.