Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Symfony]Personalizacja filtrów w panelu admina, niby proste a nie działa...
athabus
post 16.06.2010, 14:34:55
Post #1





Grupa: Zarejestrowani
Postów: 898
Pomógł: 48
Dołączył: 2.11.2005
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
Crozin
post 16.06.2010, 14:58:05
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
athabus
post 16.06.2010, 15:11:31
Post #3





Grupa: Zarejestrowani
Postów: 898
Pomógł: 48
Dołączył: 2.11.2005
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
arecki
post 16.06.2010, 15:45:48
Post #4





Grupa: Zarejestrowani
Postów: 222
Pomógł: 35
Dołączył: 6.02.2005

Ostrzeżenie: (0%)
-----


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. }


--------------------
Go to the top of the page
+Quote Post
athabus
post 16.06.2010, 16:09:01
Post #5





Grupa: Zarejestrowani
Postów: 898
Pomógł: 48
Dołączył: 2.11.2005
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Wave
post 21.06.2010, 19:19:07
Post #6





Grupa: Zarejestrowani
Postów: 332
Pomógł: 6
Dołączył: 13.01.2005

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
destroyerr
post 21.06.2010, 19:55:07
Post #7





Grupa: Zarejestrowani
Postów: 879
Pomógł: 189
Dołączył: 14.06.2006
Skąd: Bytom

Ostrzeżenie: (0%)
-----


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.

Ten post edytował destroyerr 22.06.2010, 12:47:14
Go to the top of the page
+Quote Post
athabus
post 22.06.2010, 10:55:41
Post #8





Grupa: Zarejestrowani
Postów: 898
Pomógł: 48
Dołączył: 2.11.2005
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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ć.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 10:05