Autor Wątek: Problem z pagenizacją z zachowaniem filtrów  (Przeczytany 57 razy)

Kaysof

  • Newbie
  • *
  • Wiadomości: 1
    • Zobacz profil
Problem z pagenizacją z zachowaniem filtrów
« dnia: Grudzień 06, 2018, 10:03:18 »
Gdy tworzyłem nowy projekt z bundlem EasyAdmin nadpisałem formularz wyszukiwania aby wyszukiwał wybrane pola. Do tego użyłem dql_filter. Teraz muszę ten mechanizm przenieść do starszego projektu tyle że on ma starego EasyAdmina (ten ma ścieżke JavierEguiluz, nowa wersja ma EasyCorp). Filtry działają jednak nie wiem dlaczego kolejne strony wyszukiwania nie mają już filtrów. Tak jakby wyświetlały kolejne strony listy (bez wyszukiwania).

Niżej akcja odpowiadająca za szukanie, ta niedziałająca na sterej wersji EasyAdmin'a. Jeśli potrzebujecie inne części kodu to pytajcie, muszę to rozwiązać prędzej czy później.
protected function searchAction()
    {
        $query ="P";
        $this->dispatch(EasyAdminEvents::PRE_SEARCH);
        $filter_arr = array();
        $filter_arr['zone'] = trim($this->request->query->get('strefaAg'));
        $filter_arr['name'] = trim($this->request->query->get('name'));
        if($filter_arr['name']!="") $filter_arr['name']="%".$filter_arr['name']."%";

        // if the search query is empty, redirect to the 'list' action
        if (!array_filter($filter_arr)) {
            $queryParameters = array_replace($this->request->query->all(), array('validerror'=>'','action' => 'list', 'query' => ''));
            $queryParameters = array_filter($queryParameters);

            return $this->redirect($this->get('router')->generate('easyadmin', $queryParameters));
        }
        $this->entity['search']['dql_filter']="";
        foreach ($filter_arr as $key=>$value) {
            if($value!=""){
                if(strrpos($value, "%")){
                    $this->entity['search']['dql_filter'].= ($this->entity['search']['dql_filter'])? (" AND entity.".$key." LIKE '".$value."'") : ("entity.".$key." LIKE '".$value."'");
                }else{
                    $this->entity['search']['dql_filter'].= ($this->entity['search']['dql_filter'])? (" AND entity.".$key." = '".$value."'") : ("entity.".$key." = '".$value."'");
                }
            }
        }
       
        $searchableFields = $this->entity['search']['fields'];
        $paginator = $this->findBy(
                $this->entity['class'],
                $query,
                $searchableFields,
                $this->request->query->get('page', 1),
                $this->config['list']['max_results'],
                $this->request->query->get('sortField'),
                $this->request->query->get('sortDirection'),
                $this->entity['search']['dql_filter']
        );
        //return new Response(json_encode($paginator));
        $fields = $this->entity['list']['fields'];
       
        $this->dispatch(EasyAdminEvents::POST_SEARCH, array(
            'fields' => $fields,
            'paginator' => $paginator,
        ));
       
        return $this->render($this->entity['templates']['list'], array(
            'paginator' => $paginator,
            'fields' => $fields,
            'delete_form_template' => $this->createDeleteForm($this->entity['name'], '__id__')->createView(),
            $this->entity['search']['dql_filter'],
            'rodzajAg' => $this->getRodzajAg(),
            'strefaAg' => $this->getStrefaAg()
        ));
    }