Установка параметра url, отличного от Algolia, с помощью помощника algolia

Я использую Instantsearch.js от Algolia и хочу обновить параметр запроса uri, не связанный с algolia, в моем скрипте. Я вижу, что могу задать запрос и выполнить поиск с помощью помощника:

search.helper.setQuery('myquery').search();

Это работает, но мне интересно, могу ли я использовать помощник для установки дополнительного параметра uri в строке запроса, который связан не с запросом Algolia, а с функциональностью моего сайта.

Я вижу, что в документации есть множество функций для установки параметров запроса: https://github.com/algolia/algoliasearch-helper-js#url-helpers, но ни один из них, похоже, не соответствует тому, что я ищу. У вас есть предложения о том, как я могу обновить строку запроса, например: "country_code", до значения, например: "FR", перед выполнением search.helper.setQuery выше? В идеале мне бы хотелось, чтобы оба значения устанавливались в uri одновременно. Спасибо!


person Nathan W    schedule 06.01.2016    source источник


Ответы (1)


Instantsearch.js не предоставляет API для этого, но сохраняет все параметры, установленные другими частями кода. Итак, в вашем случае, если URL-адрес уже имеет country_code, тогда все готово.

В противном случае, если вы хотите сделать это из внешнего интерфейса, вы можете использовать History API браузера. Кроме того, вы можете использовать getStateAsQueryString в помощнике, который сериализует текущее состояние и позволит вам добавить дополнительные параметры (например, country_code). Но вам нужно быть осторожным при использовании тех же параметров, которые используются для инициализации механизма URL-адреса в мгновенном поиске (например, какие атрибуты используются для URL-адреса). Если вы используете значения по умолчанию, все будет в порядке.

Для замены текущего состояния URL / истории код будет выглядеть так:

window.history.replaceState(
  null,
  'Title',
  '?' + helper.getStateAsQueryString({
    moreAttributes: {
      country_code: 'fr'
    }
  }));

Чтобы изменить текущее значение вашего параметра, это будет примерно так:

window.history.pushState(
  null,
  'Title',
  '?' + helper.getStateAsQueryString({
    moreAttributes: {
      country_code: 'de'
    }
  }));
person bobylito    schedule 06.01.2016
comment
Начиная с URL-адреса вида http://example.com/spaces/find2/?q=. При использовании pushstate или replaceState до и в сочетании с search.helper.setQuery('Paris').search(); я получаю URL-адрес, подобный этому: с двумя значениями для q: http://example.com/spaces/find2/q=&cc=FR?q=Paris Далее, без символа '?' перед первым q, он не создает действительный uri. (продолжение ..) - person Nathan W; 07.01.2016
comment
Мой текущий сайт на самом деле начинается с: http://example.com/spaces/find2?q=, но это сокращается до этого (отбрасывая путь find2)! http://example.com/spaces/q=&cc=FR?q=Paris Так что, возможно, мне нужно будет найти библиотеку URL-адресов javascript, чтобы очистить это, а не использовать встроенные методы pushState / replaceState. - person Nathan W; 07.01.2016
comment
Если вы хотите повторно использовать параметр q, но не используете поле поиска и хотите, чтобы параметр запроса вашего поиска имел то же значение, тогда ваше первоначальное решение. У вас есть URL-адрес, которым мы можем поделиться? - person bobylito; 07.01.2016
comment
Спасибо @bobylito - я написал вам по электронной почте. Также отмечено, что console.log(search.helper.getStateAsQueryString({ moreAttributes: { country_code: 'FR' } } ) выводит только, например: "q=&cc=FR", а не раздел запроса после '?'. Спасибо!! - person Nathan W; 07.01.2016
comment
Итак, проблема была решена Тимом Керри - с небольшой настройкой: чтобы она работала, необходимо добавить '?' + helper.getStateAsQueryString ({.... а затем замена работает как для pushState, так и для replaceState, так что это, вероятно, следует добавить в решение. Браво! - person Nathan W; 07.01.2016