Mateusz Wądołkowski

Mateusz Wądołkowski PCDOCTOR, właściciel

Temat: [sf 1.4] Filtrowanie domyślne

Witam,

Mam taki problem. Pewnie to bardzo proste ale nie mogę sobie poradzić.
Mam pole statusu 'aktywny' i chciałbym aby domyślnie dane były przefiltrowane i pokazywały
tylko aktywne osoby. Jak ustawię sobie domyślną wartość w definicji filtra to owszem w formularzu filtra domyślna wartość ustawia się prawidło ale dane nie są wcale przefiltrowane.

Nie chcę ustawiać takiego sztucznego linku, gdzie domyślne fitrlowanie byłoby ustawione jako get. Na pewno można to zrobić jakoś bardziej elegancko.

W rozszerzonej definicji filtra mam
public function configure()
{
$this->widgetSchema['aktywny'] = new sfWidgetFormChoice (array('choices' => array( '1' => 'tak', '0' => 'nie', '' => ''),'default' => '1'), array('name' => 'osoba_filters[aktywny][text]');
}

A w akcji index:

public function executeIndex(sfWebRequest $request)
{

$query = Doctrine_Core::getTable('Osoba')->createQuery('a')->orderBy('nazwisko ASC');

//pobieram wartości filtra
$filterValues = $request->getParameter('osoba_filters');

//tworze nowy formularz zawierjący dane filtra
$filter = new OsobaFormFilter($filterValues);
//przypisuję zapytanie o tablice
$this->formfilter->setQuery($query);

if($filterValues){
//bind the values
$this->formfilter->bind($filterValues);
//if valid, specialise the request using the form
if($this->formfilter->isValid())
$query = $this->formfilter->getQuery();
}

$this->osoby = $query->execute();

}

Z góry dzięki za pomoc
Mateusz
Grzegorz Śliwiński

Grzegorz Śliwiński Programista python

Temat: [sf 1.4] Filtrowanie domyślne

Mówimy o akcjach generowanych dla admina?
Rok temu głowiłem się z podobnym problemem:

http://www.fizyk.net.pl/en/blog/default-filter-values-...
Mateusz Wądołkowski

Mateusz Wądołkowski PCDOCTOR, właściciel

Temat: [sf 1.4] Filtrowanie domyślne

Tak, generuję moduł admina automatycznie i chciałbym, żeby domyślnie dane były od razu w odpowiedni sposób przefiltrowane. Sprawdzę dzisiaj informacje z linku, który podesłałeś i odpowiem czy jest ok.
Mateusz Wądołkowski

Mateusz Wądołkowski PCDOCTOR, właściciel

Temat: [sf 1.4] Filtrowanie domyślne

Może nie do końca w ten sposób, bo nie ma pliku moduleGeneratorConfiguration, a nie doszukałem się też metod getFilterForm w klasie BaseFormFilter ale nieważne, zrobiłem tak.

W akcji index
$filterValues = $request->getParameter('osoba_filters');
if(!$filterValues)
{
$filterValues=array();
$filterValues['aktywny']['text'] = '1';
}
Jeśli nie ma ustawionych żadnych filtrów to sam tworzę domyślny i wtedy dopiero przygotowuje formularz.

Jeszcze tylko jeden zgryz - ochrona csrf. Na razie ją po prostu wyłączyłem, bo przy takiej konfiguracji krzyczy, że pole csrf nie jest ustawione.
Grzegorz Śliwiński

Grzegorz Śliwiński Programista python

Temat: [sf 1.4] Filtrowanie domyślne

Mateusz Wądołkowski:
Może nie do końca w ten sposób, bo nie ma pliku moduleGeneratorConfiguration, a nie doszukałem się też metod getFilterForm w klasie BaseFormFilter ale nieważne, zrobiłem tak.

w klasie podmień module na nazwę swojego modułu, jeśli np. moduł nazywa się blog, to to będzie blogGeneratorConfigurator:

 apps/backend/modules/blog/lib/blogGeneratorConfiguratorclass.php


W tym obiekcie tworzysz metodę getFilterForm, nadpisując dziedziczona.

Druga metoda też w tej samej klasie powinna być umieszczona (znowu nadpisujesz dziedziczoną)

I BaseFormFilter nie ma tu nic do rzeczy :)

Co jeszcze... tutaj jest zaimplementowane rozwiązanie:

https://github.com/fizyk/vjCommentPlugin/blob/master/mo...
Mateusz Wądołkowski

Mateusz Wądołkowski PCDOCTOR, właściciel

Temat: [sf 1.4] Filtrowanie domyślne

U mnie w modułach w ogóle nie ma folerów lib, a tym bardziej plików XXXgerneratorconfigurator.
Jedyne miejsce gdzie mi się wydawało, ze należałoby to umieścić jest lib/filter/osobaformfilter.class.php i dlatego wspomniałem o BaseFormFilter.

Czy mam folder lib i osobaGeneratorConfiguratorclass.php po prostu stworzyć?
Chyba coś źle tłumaczę. Moduł został stworzony z opcjami CRUD ale nie jest generowany automaycznie, tzn. nie uzywam generator.yml.
Grzegorz Śliwiński

Grzegorz Śliwiński Programista python

Temat: [sf 1.4] Filtrowanie domyślne

hmmm... no to w takim razie ten sposób Ci nie pomoże.

Musisz w takim razie ustawić sobie wartości filtra domyślne (jak formularz, filtr to też formularz) i domyślne wartości do zapytania. Ale to już musisz ręcznie zrobić.
Mateusz Wądołkowski

Mateusz Wądołkowski PCDOCTOR, właściciel

Temat: [sf 1.4] Filtrowanie domyślne

Dzięki za podpowiedzi. Twój tekst pomógł mi i to co zrobiłem działa tylko jest takie nieleganckie ;)
Nie bardzo rozumiem dlaczego ustawienie domyślnej wartości w formularzu filtra (czy to przez setDefault, czy przez 'default' => x) nie powoduje filtrowania, a jedynie ustawienie wartości w formularzu.
Grzegorz Śliwiński

Grzegorz Śliwiński Programista python

Temat: [sf 1.4] Filtrowanie domyślne

Filtr to tylko formularz.
Przechowuje wartości, które trzeba wykorzystać przy pobieraniu danych. generowane moduły załatwiają te rzeczy automatycznie między innymi przez generatorConfiguratora, ale w tych musisz obsłużyć te zmiany sam.
Sprawdź, w jaki sposób parametry filtra są wykorzystywane dalej, bo sam nie korzystałem z tych modułów. Używałem tylko te wykorzystujące generator.yml, albo sam tworzyłem logikę.
Do admina szybciej, bo wszelkie zmiany w modelu praktycznie automatem pojawiają się w module ;)



Wyślij zaproszenie do