2016-11-23 6 views
0

Ich benutze SOLR für meine Facetten, alles funktioniert gut, auch die Filterabfragen sind korrekt.Facettierte Suche/Layered Navigation, Ergebnis Filterung

Ich kämpfe mit dem php Teil für die Filteranzeige.

Die Facetten sehen mit den aktiven Filtern so aus. Aber ich will diese Links erreichen ...

Manufacturers 
------------- 
[] BMW (/page?q=cars&manufacturer=Audi&manufacturer=Mercedes&manufacturer=BMW&model=BMW - X5&model=Mercedes - C) 
[x] Audi (/page?q=cars&manufacturer=Mercedes&model=BMW - X5&model=Mercedes - C) 
[x] Mercedes(/page?q=cars&manufacturer=Audi&manufacturer=Mercedes&model=BMW - X5&model=Mercedes - C) 
[] Seat(/page?q=cars&manufacturer=Audi&manufacturer=Mercedes&manufacturer=Seat&model=BMW - X5&model=Mercedes - C) 
[] Skoda (/page?q=cars&manufacturer=Audi&manufacturer=Mercedes&manufacturer=Skoda&model=BMW - X5&model=Mercedes - C)  

Model 
------------- 
[] BMW - E49 (/page?q=cars&manufacturer=Audi&manufacturer=Mercedes&model=BMW - X5&model=Mercedes - Cmodel=BMW - E49) 
[] BMW - X3 (/page?q=cars&manufacturer=Audi&manufacturer=Mercedes&model=BMW - X5&model=Mercedes - C&model=BMW - X3) 
[x] BMW - X5 (/page?q=cars&manufacturer=Audi&manufacturer=Mercedes&model=Mercedes - C) 
[] Mercedes - A (/page?q=cars&manufacturer=Audi&manufacturer=Mercedes&model=Mercedes - C&model=BMW - X5&model=Mercedes - A) 
[] Mercedes - B (/page?q=cars&manufacturer=Audi&manufacturer=Mercedes&model=Mercedes - C&model=BMW - X5&model=Mercedes - B) 
[x] Mercedes - C (/page?q=cars&manufacturer=Audi&manufacturer=Mercedes&model=BMW - X5) 
[] Mercedes - E (/page?q=cars&manufacturer=Audi&manufacturer=Mercedes&model=Mercedes - C&model=BMW - X5&model=Mercedes - E) 
[] Mercedes - S (/page?q=cars&manufacturer=Audi&manufacturer=Mercedes&model=Mercedes - C&model=BMW - X5&model=Mercedes - S) 

ich große Schwierigkeiten habe die aktuellen aktiven Auswahlen zu bekommen und wenn ich auf dem bereits ausgewählte Elemente klicken, wird es aus dem URL-String zu entfernen.

Funktion, die ich verwende, um die Abfragezeichenfolge abzurufen.

function getFilter() { 
    $query = explode('&', $_SERVER['QUERY_STRING']); 
    $params = array(); 

    foreach($query as $param) { 
     list($name, $value) = explode('=', $param); 
     $params[urldecode($name)][] = urldecode($value); 
    } 

    return $params; 
} 

Die obige Funktion gibt mir so etwas wie diese:

(
    [q] => Array 
     (
      [0] => cars 
     ) 

    [manufacturer] => Array 
     (
      [0] => Audi 
      [1] => Mercedes 
     ) 

    [model] => Array 
     (
      [0] => BMW - X5 
      [1] => Mercedes - C 
     ) 

) 

Danach werde ich versuchen, die ausgewählten Elemente zu erhalten und sie zu entfernen, wenn in der Facette Schleife der Wert eine Facette gleich, aber ich Ich kann meinen Kopf nicht darum wickeln.

foreach($newFacetArray as $val => $count) { 
    if(strlen($val) != 0) { 
     if(isset($activeFilters[$value])) { 
      if(in_array($val,$activeFilters[$value])) { 
       foreach($activeFilters[$value] as $af) { 
        if($af == $val) { 
         $as = array_search($val,$activeFilters[$value]); 
         unset($activeFilters[$value][$as]); 
        } else { 
         if($af != $val) { 
          $activeFilters[$value][] = $val; 
         } 
        } 
       } 
      } 
     } 

     $url = http_build_query($activeFilters); 
     #$url = $_SERVER['PHP_SELF']."?".$_SERVER['QUERY_STRING'].'&'.(($value == 'manufacturerName')?$value.'[]':$value).'='.$val; 

     echo '<li class="list-group-item"><a class="attribute-loader" href="'.$url.'"><input type="checkbox" name="'.$value.'" '.$facetSearch->verifyIfChecked($_GET,$val).'/> ' . $val . ' <span class="pull-right">'.$count.'</span></a></li>'; 
    } 
} 

Antwort

0

Haben es gelöst, es war ein bisschen schwierig, aber ich habe es geschafft, es für jede dynamische Facette arbeiten.