소스 검색

Merge remote-tracking branch 'julienbourdeau/feat/tag-pages'

Jordi Boggiano 7 년 전
부모
커밋
d9468a78f5

+ 4 - 1
src/Packagist/WebBundle/Controller/WebController.php

@@ -78,7 +78,10 @@ class WebController extends Controller
         $tagsFilter = $req->query->get('tags');
 
         if ($req->getRequestFormat() !== 'json') {
-            return $this->render('PackagistWebBundle:Web:search.html.twig', ['packages' => []]);
+            return $this->render('PackagistWebBundle:Web:search.html.twig', [
+                'packages' => [],
+                'tags' => $tagsFilter
+            ]);
         }
 
         if (!$req->query->has('search_query') && !$typeFilter && !$tagsFilter) {

+ 1 - 1
src/Packagist/WebBundle/Resources/config/algolia_settings.yml

@@ -32,4 +32,4 @@ separatorsToIndex:
 
 attributesForFaceting:
     - "type"
-    - "tags"
+    - "searchable(tags)"

+ 45 - 26
src/Packagist/WebBundle/Resources/public/js/search.js

@@ -3,21 +3,36 @@ document.getElementById('search_query_query').addEventListener('keydown', functi
         e.preventDefault();
     }
 });
+var searchParameters = algoliaConfig.tags ? {
+    disjunctiveFacets: ['tags'],
+    disjunctiveFacetsRefinements: {
+        tags: [algoliaConfig.tags]
+    }
+} : {};
 
 var search = instantsearch({
     appId: algoliaConfig.app_id,
     apiKey: algoliaConfig.search_key,
     indexName: algoliaConfig.index_name,
-    urlSync: true,
+    urlSync: {
+        trackedParameters: ['query', 'attribute:*', 'page']
+    },
     searchFunction: function(helper) {
         var searchResults = $('#search-container');
-        if (helper.state.query === '' && helper.state.hierarchicalFacetsRefinements.type === undefined && helper.state.hierarchicalFacetsRefinements.tags === undefined) {
+
+        if (helper.state.query === ''
+            && helper.state.hierarchicalFacetsRefinements.type === undefined
+            && helper.state.disjunctiveFacetsRefinements.tags === undefined
+            && algoliaConfig.tags.length == 0
+        ) {
             searchResults.addClass('hidden');
         } else {
-            helper.search();
             searchResults.removeClass('hidden');
         }
-    }
+
+        helper.search();
+    },
+    searchParameters: searchParameters
 });
 
 search.addWidget(
@@ -26,10 +41,7 @@ search.addWidget(
         magnifier: false,
         reset: false,
         wrapInput: false,
-        autofocus: true,
-        //queryHook: function (query, search) {
-        //    search(query);
-        //}
+        autofocus: true
     })
 );
 
@@ -120,27 +132,34 @@ search.addWidget(
 );
 
 search.addWidget(
-  instantsearch.widgets.menu({
-    container: '.search-facets-type',
-    attributeName: 'type',
-    limit: 15,
-    showMore: true,
-    templates: {
-      header: 'Package type'
-    }
-  })
+    instantsearch.widgets.menu({
+        container: '.search-facets-type',
+        attributeName: 'type',
+        limit: 15,
+        showMore: true,
+        templates: {
+            header: 'Package type'
+        }
+    })
 );
 
 search.addWidget(
-  instantsearch.widgets.menu({
-    container: '.search-facets-tags',
-    attributeName: 'tags',
-    limit: 15,
-    showMore: true,
-    templates: {
-      header: 'Tags'
-    }
-  })
+    instantsearch.widgets.refinementList({
+        container: '.search-facets-tags',
+        attributeName: 'tags',
+        limit: 15,
+        showMore: true,
+        templates: {
+            header: 'Tags'
+        },
+        searchForFacetValues:true
+    })
 );
 
 search.start();
+
+if(algoliaConfig.tags !== '') {
+    search.helper.once('change', function (e) {
+        window.history.replaceState(null, 'title', window.location.pathname);
+    });
+}

+ 1 - 0
src/Packagist/WebBundle/Resources/views/layout.html.twig

@@ -204,6 +204,7 @@
 
         <script>
             var algoliaConfig = {{ algolia|json_encode|raw }};
+            algoliaConfig['tags'] = '{{ tags|default(false) }}';
         </script>
 
         <script src="{{ asset('libs/jquery-2.1.4.min.js') }}"></script>