坚持使用algolia搜索网址重写的自定义网址参数

时间:2020-07-11 01:09:40

标签: javascript algolia instantsearch.js vue-instant-search

我们正在使用来自阿尔及利亚的vue Instantsearch。

当用户使用一些初始url参数登陆页面时,algolia Instantsearch会加载初始搜索,并更改url以包括搜索参数。但是,当algolia重写url时,初始url参数不会持续存在,我们希望它们保持不变。即

  • 登陆/stuff?myparam=value
  • algolia设置初始搜索结果,并将url更改为/stuff?refinementList=...,并删除了url参数myparam。有没有办法将其保留在网址中?

2 个答案:

答案 0 :(得分:0)

默认情况下,Vue InstantSearch会覆盖查询参数。您可以通过Vue InstantSearch的{​​{3}}选项控制URL中呈现的内容。您可以为history路由器提供自定义routing.router功能。您将能够在URL中保留“当前”参数。

答案 1 :(得分:0)

我们需要 ?lang=[LANG_CODE],例如 ?lang=de 后跟 algolia 的东西。

这就是我们想出的:(注意常量 ICL_LANGUAGE_CODE,它由 WPML (WordPress) 设置为当前语言。 请记住,当搜索中没有参数时,它不需要有结尾 & 符号。

基础:

routing: '.$routing.'

其中 $routing 定义为:

            $routing = 'true'; // For base language
    if( $needs_custom_routing ) {
    $routing = '{
router: instantsearch.routers.history({

/*
  parseURL({ qsModule, location }) { return qsModule.parse(location.search.slice(1)); },
  */
  
createURL({ qsModule, location, routeState }) {
        const { origin, pathname, hash } = location;

        const queryParameters = {};
        if (routeState.query) {
            queryParameters.query = encodeURIComponent(routeState.query);
        }
        if (routeState.categories) {
            queryParameters.categories = routeState.categories.map(encodeURIComponent);
        }
        if (routeState.page !== 1) {
            queryParameters.page = routeState.page;
        }

    const queryString = qsModule.stringify(routeState);
                

    if( queryString ) {
        return `${origin}${pathname}?lang='.ICL_LANGUAGE_CODE.'&${queryString}`;
    } else {
        return `${origin}${pathname}?lang='.ICL_LANGUAGE_CODE.'`;   
    }
    
},      
  
})
} /* /routing */';
} // /needs_custom_routing
相关问题