2017-03-14 8 views
0

Hallo Ich versuche, eine Liste im Backoffice zu filtern. Es zeigt den Filter an, er speichert ihn auch nach einem Klick auf Suchen, aber es passiert nichts. Gleiches mit Seitenumbruch.Prestashop: Wie man in HelperList filtert

$schueler = $this->getAllSchuelerbyDiplom($id_diplom); 
    $diplom_name = $this->getDiplomNamebyID($id_diplom); 

    $fields_list = array(
     'id_schueler' => array(
      'title' => 'ID', 
      'align' => 'center', 
      'class' => 'fixed-width-xs', 
      'search' => true), 

     'customer_name' => array(
      'title' => $this->l('ID Customer')), 

     'id_gruppe' => array(
      'title' => $this->l('ID Gruppe')), 

     'name' => array(
      'title' => $this->l('Name'), 
      'filter_key' => 'name'.$diplom_name), 

     'vorname' => array(
      'title' => $this->l('Vorname')), 

     'punkte' => array(
      'title' => $this->l('Punkte')), 

     'bestanden' => array(
      'title' => $this->l('Bestanden'), 
      'active' => 'toggle', 
      'class' => 'fixed-width-xs', 
      'type' => 'bool'), 

     'date_added' => array(
      'title' => $this->l('Datum'), 
      'class' => 'fixed-width-xs', 
      'type' => 'date'), 
    ); 

    $helper = new HelperList(); 
    $helper->table = 'no-idea-what-this-is-for'; 
    $helper->title = $diplom_name; 
    $helper->shopLinkType = ''; 
    $helper->actions = array('view', 'edit', 'delete'); 
    $helper->listTotal = count($schueler); 
    $helper->identifier = 'id_schueler'; 
    $helper->token = Tools::getAdminTokenLite('AdminModules'); 
    $helper->currentIndex = $this->context->link->getAdminLink('AdminModules', false) . '&configure=' . $this->name .'&diplom_name=' . $diplom_name; 

    return $helper->generateList($schueler, $fields_list); 

Was ist falsch an meinem Code? Was ist $ helper-> Tabelle für? Ich versuchte es verschiedene Dinge, aber nichts hilft ...

EDIT

public function getAllSchuelerbyDiplom($id_diplom) { 
    $query = new DbQuery(); 
    $query->select('s.*, CONCAT(c.firstname,\' \',c.lastname) AS customer_name'); 
    $query->from($this->table_name.'_schueler', 's'); 
    $query->leftJoin('customer', 'c', 's.id_customer = c.id_customer'); 
    $query->where('s.id_diplom = ' . (int)$id_diplom); 
    return Db::getInstance()->ExecuteS($query); 
} 

Antwort

0

Das Problem ist, dass HelperList Objekt selbst zeigt nur Filter verwendet werden, aber die tatsächliche Datenliste für Sie nicht filtern .

In Ihrer $this->getAllSchuelerbyDiplom($id_diplom); Methode nehme ich an, dass Sie SQL-Abfrage ausführen, um alle Zeilen abzurufen, jedoch müssen Sie sie ändern, um Filter, Paginierungen (Seitennummer und Zeilen pro Seite) oder Reihenfolge zu berücksichtigen. Sie müssen GET/POST-Werte oder Werte überprüfen, die in Cookie gesetzt wurden, um sie zu erkennen.

$helper->table legt fest, dass der Tabellenname und die Listenaktionen mit diesem Namen vorangestellt werden, damit sie sich von anderen Listen auf der Seite unterscheiden.

Edit:

Beispiel für Paginierung Einstellung und Seite

public function getPage() 
{ 
    // $tableName must be equal to what you set in $helper->table 

    // Check if page number was selected and return it 
    if (Tools::getIsset('submitFilter'.$tableName)) { 
     return (int)Tools::getValue('submitFilter'.$tableName); 
    } 
    else { 
     // Check if last selected page is stored in cookie and return it 
     if (isset($this->context->cookie->{'submitFilter'.$tableName})) { 
      return (int)$this->context->cookie->{'submitFilter'.$tableName}; 
     } 
     else { 
      // Page was not set so we return 1 
      return 1; 
     } 
    } 
} 

public function getRowsPerPage() 
{ 
    // $tableName must be equal to what you set in $helper->table 

    // Check if number of rows was selected and return it 
    if (Tools::getIsset($tableName. '_pagination')) { 
     return (int)Tools::getValue($tableName. '_pagination'); 
    } 
    else { 
     // Check if number of rows is stored in cookie and return it 
     if (isset($this->context->cookie->{$tableName. '_pagination'})) { 
      return (int)$this->context->cookie->{$tableName. '_pagination'}; 
     } 
     else { 
      // Return 20 rows per page as default 
      return 20; 
     } 
    } 
} 

public function getAllSchuelerbyDiplom($id_diplom) { 
    $query = new DbQuery(); 
    $query->select('s.*, CONCAT(c.firstname,\' \',c.lastname) AS customer_name'); 
    $query->from($this->table_name.'_schueler', 's'); 
    $query->leftJoin('customer', 'c', 's.id_customer = c.id_customer'); 
    $query->where('s.id_diplom = ' . (int)$id_diplom); 

    // Limit the result based on page number and rows per page 
    $query->limit($this->getRowsPerPage(), ($this->getPage() - 1) * $this->getRowsPerPage()); 

    return Db::getInstance()->ExecuteS($query); 
} 

Sie einen p(Tools::getAllValues()); d($this->context->cookie->getAll(); platzieren können, nachdem Sie eine Liste erzeugen dann einen Filter in der Liste gesetzt und es zeigt Ihnen alle Variablen Sie müssen Filter und Bestellung erstellen.

+0

Ja, ich habe normale ExecuteS-Funktion ... Können Sie in einem Beispiel erklären, wie GET/Post in meiner Funktion verwendet wird? Ich habe meinen ursprünglichen Post bearbeitet. Ich zeige dort meine Funktion. Danke vielmals! –

+0

@EmanuelSchendorfer Ich habe ein Beispiel hinzugefügt. – TheDrot

+0

Danke! Ihr Beispiel hat mir sehr geholfen, die Paginierung zu funktionieren! Nur benötigt, um kleine Dinge zu ändern. Ich denke in deinem Code gibt es zwei Mal ";" fehlt. –