Przełączanie URL – query string – filtrowanie po wielu parametrach

W filtrowaniu treści – wybieramy z listy opcję – wybrane ID, nazwy przekazujemy jako parametery query string. Pozwala to na filtrowanie po wielu parametrach niezależnie.

let url = new URL(location.href);
let onChangePostion = function(){

    url.searchParams.delete('page');                              // 1 strona

    var position_name = $(this).find(':selected').text().trim();  // Nazwa
    var position_id   = $(this).val();                            // id

    if(position_id) {
        url.searchParams.set('position_id', position_id);
    } else {
        url.searchParams.delete('position_id');
    }
    location.href = url.toString();
    return false;
};
$("#filter-position").on('change', onChangePostion);

Kontroller

$position_id = $this->getRequest()->getQuery('position_id'); 

// Przekazano parametr - wybierz pasujące id oraz parent_id
if($position_id) {

  $query = $query->innerJoinWith('Positions', function($q) use ($position_id) {
      return $q->where(['OR' => [
                                  'Positions.id'        => $position_id, 
                                  'Positions.parent_id' => $position_id 
                                ]
                     ]);
  });
};