algoliasearchHelper层次结构

时间:2016-07-31 03:29:10

标签: algolia

我正在尝试使用Algolia's searchHelper.js实现分层类别菜单,但类别内容未显示。

https://jsfiddle.net/t0tue5rk/1/

示例Algolia记录:

objectID: 41
title: "Canon 40D With Lens"
hierarchicalCategories: {
"lvl0" : "Video Juegos y Consolas",
"lvl1" : "Video Juegos y Consolas > PS3",
"lvl2" : "Video Juegos y Consolas > PS3 > Juegos"
}

1 个答案:

答案 0 :(得分:5)

分层方面与连接和分离方面的不同之处在于它们基于树。您的示例中的问题是您为此不同的结构重用了相同类型的模板。您可以在主documentation of the Algolia JS Helper上找到有关操作层次结构面的更多信息。

我在jsFiddle上也是fixed your sample。以下是我更改的部分:

  • 接收数据时处理层次结构(l.128):

    else if(facetName === 'categories') {
      facetContent = {
        facet: facetName,
        title: FACETS_LABELS[facetName],
        values: content.getFacetValues(facetName, {sortBy: ['isRefined:desc', 'count:desc']})
      };
      facetsHtml += hierarchicalFacetTemplate.render(
        facetContent,
        {sub: hierarchicalFacetTemplateSource});
    }
    

    为了简单起见,我硬编码了属性的名称。

  • 创建两个模板,一个用于容器,另一个用于递归遍历值树。 (html:l.117-138)

    <script type="text/template" id="hierarchical-facet-header-template">
      <div class="facet facet-hierarchical">
        <h5>{{ title }}</h5>
        {{#values}}
          {{>sub}}
        {{/values}}
      </div>
    </script>
    
    <!-- Hierarchical Facet template -->
    <script type="text/template" id="hierarchical-facet-template">
        <ul>
          {{#data}}
          <li>
            <a href="" class="facet-link toggle-refine facet-hierarchical {{#isRefined}}facet-refined{{/isRefined}}" data-facet="{{ facet }}" data-value="{{ path }}">
              {{ name }}<span class="facet-count">{{ count }}</span>
            </a>
          {{>sub}}
          </li>
        {{/data}}
      </ul>
    </script>
    
  • 将这些新模板导入JS。 (js:l.44-46)

    var hierarchicalFacetHeaderTemplateSource = $('#hierarchical-facet-header-template').text();
    var hierarchicalFacetTemplateSource = $('#hierarchical-facet-template').text();
    var hierarchicalFacetTemplate = Hogan.compile(hierarchicalFacetHeaderTemplateSource);