【问题标题】:Google CSE - search parameterGoogle CSE - 搜索参数
【发布时间】:2016-05-16 18:37:45
【问题描述】:

我正在将我网站的搜索引擎更改为 Google CSE。

我在我的网站上使用“s = term”,并将网址生成为 /search/term.html

Google 无法识别它。代码必须改变什么?

var queryParamName = 's';

 <div class="row-fluid sc-col row-dynamic-el" style="margin-bottom:40px;"><div class="row-fluid"><div id='cse' style='width: 100%;'>Loading</div></div>
<script src='//www.google.com/jsapi' type='text/javascript'></script>
<script type='text/javascript'>
google.load('search', '1', {language: 'pt', style: google.loader.themes.V2_DEFAULT});
google.setOnLoadCallback(function() {
var customSearchOptions = {};
var orderByOptions = {};
orderByOptions['keys'] = [{label: 'Relevance', key: ''} , {label: 'Date', key: 'date'}];
customSearchOptions['enableOrderBy'] = true;
customSearchOptions['orderByOptions'] = orderByOptions;
var customSearchControl = new google.search.CustomSearchControl('01111111111:111111111', customSearchOptions);
customSearchControl.setResultSetSize(google.search.Search.FILTERED_CSE_RESULTSET);
var options = new google.search.DrawOptions();
options.enableSearchResultsOnly();
options.setAutoComplete(true);
customSearchControl.draw('cse', options);
function parseParamsFromUrl() {
var params = {};
var parts = window.location.search.substr(1).split('&');
for (var i = 0; i < parts.length; i++) {
var keyValuePair = parts[i].split('=');
var key = decodeURIComponent(keyValuePair[0]);
params[key] = keyValuePair[1] ?
decodeURIComponent(keyValuePair[1].replace(/\+/g, ' ')) :
keyValuePair[1];
}
return params;
}
var urlParams = parseParamsFromUrl();
var queryParamName = 's';
if (urlParams[queryParamName]) {
customSearchControl.execute(urlParams[queryParamName]);
}
}, true);
</script>

</div>

【问题讨论】:

    标签: javascript google-search


    【解决方案1】:

    我相信您使用的是 V1 代码,而不是默认的 V2 代码。

    我无法对 V1 发表评论,但对于 V2 代码,请访问您的谷歌 cse control panel 中的外观部分,选择适当的布局并获取代码 (V2)。我使用 Results only 布局并制作了自己的自定义搜索框。以下是我对自定义查询参数的设置:

    搜索框

    我有 div id 和类标签的自定义 css 样式表:searchbox2、searchcont2 和 searchString2,您需要将它们替换为您的样式表属性。自定义查询参数在form 部分的name=s 下定义。

    <div class="row"><div class="col-sm-12">
    <div id="searchbox2" style="margin:0 auto; display: table;">
    <div class="searchcont2">
        <form role="search" method="get" action="https://www.example.com/search/">
            <input id="searchString2" name="s" placeholder=" Search" type="text">
        </form>
    </div></div>
    </div></div>
    

    如果您使用其他搜索布局,即 两页两列,您可以使用以下搜索框代码,data-queryParameterName 将采用自定义搜索查询词。

    <div class="gcse-searchbox" data-resultsUrl="http://www.example.com/search/"
    

    data-newWindow="true" data-queryParameterName="s">

    对于 HTML5 页面,google cse 要求将 class 属性设置为 gcse-XXX,例如 div class="gcse-searchbox",否则搜索结果可能无法按预期加载。更多信息请访问https://developers.google.com/custom-search/docs/element#html5

    搜索结果

    在定义的搜索页面上添加您的 google cse resultsonly 代码,例如 https://www.example.com/search/ 并将 &lt;GOOGLE CSE CX ID&gt; 替换为您的 cse cx id。与搜索框相同,HTML5 页面应具有适当的 div 类属性,例如,&lt;div class="gcse-searchresults-only" 在以下情况下:

    <div class="row"><div class="col-sm-12">
    <script>
      (function() {
        var cx = '<GOOGLE CSE CX ID>';
        var gcse = document.createElement('script');
        gcse.type = 'text/javascript';
        gcse.async = true;
        gcse.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') +
            '//www.google.com/cse/cse.js?cx=' + cx;
        var s = document.getElementsByTagName('script')[0];
        s.parentNode.insertBefore(gcse, s);
      })();
    </script>
    <div class="gcse-searchresults-only">
    </div></div>
    

    干杯!

    【讨论】:

      猜你喜欢
      • 2011-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-14
      • 1970-01-01
      • 2017-06-17
      相关资源
      最近更新 更多