diff --git a/config/sync/views.view.os2loop_search_db.yml b/config/sync/views.view.os2loop_search_db.yml index 708e37e46..d1199681a 100644 --- a/config/sync/views.view.os2loop_search_db.yml +++ b/config/sync/views.view.os2loop_search_db.yml @@ -80,13 +80,10 @@ display: os2loop_post: search_result os2loop_question: search_result fields: - os2loop_page_content: + search_api_rendered_item: + id: search_api_rendered_item table: search_api_index_os2loop_search_db_index - field: os2loop_page_content - id: os2loop_page_content - entity_type: null - entity_field: null - plugin_id: search_api_field + field: search_api_rendered_item relationship: none group_type: group admin_label: '' @@ -123,7 +120,7 @@ display: element_class: '' element_label_type: '' element_label_class: '' - element_label_colon: true + element_label_colon: false element_wrapper_type: '' element_wrapper_class: '' element_default_classes: true @@ -131,26 +128,17 @@ display: hide_empty: false empty_zero: false hide_alter_empty: true - click_sort_column: value - type: text_default - settings: { } - group_column: value - group_columns: { } - group_rows: true - delta_limit: 0 - delta_offset: 0 - delta_reversed: false - delta_first_last: false - multi_type: separator - separator: ', ' - field_api_classes: false - field_rendering: true - fallback_handler: search_api - fallback_options: - link_to_item: false - use_highlighting: false - multi_type: separator - multi_separator: ', ' + view_modes: + 'entity:comment': + os2loop_post_comment: search_result + os2loop_question_answer: search_result + 'entity:node': + os2loop_documents_collection: search_result + os2loop_documents_document: search_result + os2loop_external: search_result + os2loop_post: search_result + os2loop_question: search_result + plugin_id: search_api_rendered_item filters: search_api_fulltext: id: search_api_fulltext @@ -219,18 +207,6 @@ display: expose: label: Relevance plugin_id: search_api - changed: - id: changed - table: search_api_index_os2loop_search_db_index - field: changed - relationship: none - group_type: group - admin_label: '' - order: ASC - exposed: true - expose: - label: Changed - plugin_id: search_api title: id: title table: search_api_index_os2loop_search_db_index @@ -243,29 +219,17 @@ display: expose: label: Title plugin_id: search_api - changed_1: - id: changed_1 - table: search_api_index_os2loop_search_db_index - field: changed - relationship: none - group_type: group - admin_label: 'Changed (fallback)' - order: DESC - exposed: false - expose: - label: '' - plugin_id: search_api - title_1: - id: title_1 + created: + id: created table: search_api_index_os2loop_search_db_index - field: title + field: created relationship: none group_type: group - admin_label: 'Title (fallback)' + admin_label: '' order: ASC - exposed: false + exposed: true expose: - label: '' + label: 'Authored on' plugin_id: search_api title: Search header: diff --git a/web/profiles/custom/os2loop/modules/os2loop_search_db/src/Helper/Helper.php b/web/profiles/custom/os2loop/modules/os2loop_search_db/src/Helper/Helper.php index 8017692e8..2bf597711 100644 --- a/web/profiles/custom/os2loop/modules/os2loop_search_db/src/Helper/Helper.php +++ b/web/profiles/custom/os2loop/modules/os2loop_search_db/src/Helper/Helper.php @@ -14,6 +14,7 @@ use Drupal\search_api_autocomplete\Suggestion\Suggestion; use Drupal\Core\Form\FormStateInterface; use Symfony\Component\HttpFoundation\RequestStack; +use Drupal\Core\Url; /** * Search Api Autocomplete Helper. @@ -193,6 +194,7 @@ public function formAlter(array &$form, FormStateInterface $form_state, $form_id // Add facet filter query to form to keep the filters when submitting // search form. $request = $this->requestStack->getCurrentRequest(); + $parameters = $request->query->all(); $facetFilterName = 'f'; $facetFilters = $request->get($facetFilterName); if (!empty($facetFilters) && is_array($facetFilters)) { @@ -206,6 +208,57 @@ public function formAlter(array &$form, FormStateInterface $form_state, $form_id ]; } } + + // Create links for sorting. + $sortLinks = [ + 'sortDefault' => [ + 'label' => $this->t('Best match'), + 'requestAlters' => [ + 'sort_by' => 'search_api_relevance', + 'sort_order' => 'DESC', + ], + ], + 'sortNewest' => [ + 'label' => $this->t('Newest first'), + 'requestAlters' => [ + 'sort_by' => 'created', + 'sort_order' => 'DESC', + ], + ], + 'sortOldest' => [ + 'label' => $this->t('Oldest first'), + 'requestAlters' => [ + 'sort_by' => 'created', + 'sort_order' => 'ASC', + ], + ], + 'sortAlphabetic' => [ + 'label' => $this->t('Alphabetic'), + 'requestAlters' => [ + 'sort_by' => 'title', + 'sort_order' => 'ASC', + ], + ], + ]; + + $form['#sortLinks'] = []; + foreach ($sortLinks as $type => $values) { + if (empty($parameters)) { + // Set default active. + $form['#sortLinks']['sortDefault']['active'] = TRUE; + } + else { + if (empty(array_diff_assoc($values['requestAlters'], $parameters))) { + $form['#sortLinks'][$type]['active'] = TRUE; + } + else { + $form['#sortLinks'][$type]['active'] = FALSE; + } + } + $newRequest = array_merge($parameters, $values['requestAlters']); + $form['#sortLinks'][$type]['url'] = Url::fromRoute('', $newRequest)->toString(); + $form['#sortLinks'][$type]['label'] = $values['label']; + } } } diff --git a/web/profiles/custom/os2loop/themes/os2loop_theme/assets/search.scss b/web/profiles/custom/os2loop/themes/os2loop_theme/assets/search.scss index fa33e1a24..e6474b164 100644 --- a/web/profiles/custom/os2loop/themes/os2loop_theme/assets/search.scss +++ b/web/profiles/custom/os2loop/themes/os2loop_theme/assets/search.scss @@ -30,6 +30,10 @@ $search-icon: bg-icon($search-icon-bg, $icon-color); display: none; } + .search-sort-btn.active { + text-decoration: underline; + } + .form-autocomplete { @extend .form-control-lg; border-radius: 1em; @@ -225,6 +229,11 @@ input[type="search"]::-webkit-search-results-decoration { } } +// Hide empty facets. +.facet-empty.facet-hidden { + display: none; +} + .block-facet--checkbox { .dropdown-menu { min-width: 200px; diff --git a/web/profiles/custom/os2loop/themes/os2loop_theme/templates/block/block--facet-block.html.twig b/web/profiles/custom/os2loop/themes/os2loop_theme/templates/block/block--facet-block.html.twig index 4dfdcfd78..dcdb62b6d 100644 --- a/web/profiles/custom/os2loop/themes/os2loop_theme/templates/block/block--facet-block.html.twig +++ b/web/profiles/custom/os2loop/themes/os2loop_theme/templates/block/block--facet-block.html.twig @@ -27,10 +27,11 @@ * @ingroup themeable */ #} -
-
- - + + +
+
+ {% block content %} {{ content }} {% endblock %} diff --git a/web/profiles/custom/os2loop/themes/os2loop_theme/templates/form/form--views-exposed-form-os2loop-search-db-page-search.html.twig b/web/profiles/custom/os2loop/themes/os2loop_theme/templates/form/form--views-exposed-form-os2loop-search-db-page-search.html.twig index e4b3cb461..704155586 100644 --- a/web/profiles/custom/os2loop/themes/os2loop_theme/templates/form/form--views-exposed-form-os2loop-search-db-page-search.html.twig +++ b/web/profiles/custom/os2loop/themes/os2loop_theme/templates/form/form--views-exposed-form-os2loop-search-db-page-search.html.twig @@ -17,4 +17,26 @@
{{ children }}
+
+
+
+
{{ 'Search filters'|t }}
+
+
+ +
+
+
+
+
+
+ {% for sort in element['#sortLinks'] %} + {{ sort.label }} + {% endfor %} +
+
+
diff --git a/web/profiles/custom/os2loop/themes/os2loop_theme/templates/form/form-element--edit-search-api-fulltext--2.html.twig b/web/profiles/custom/os2loop/themes/os2loop_theme/templates/form/form-element--edit-search-api-fulltext--2.html.twig index fe45c4f34..6c7ba1812 100644 --- a/web/profiles/custom/os2loop/themes/os2loop_theme/templates/form/form-element--edit-search-api-fulltext--2.html.twig +++ b/web/profiles/custom/os2loop/themes/os2loop_theme/templates/form/form-element--edit-search-api-fulltext--2.html.twig @@ -93,16 +93,4 @@
{% endif %}
-
-
-
-
{{ 'Search filters'|t }}
-
-
- -
-
-
+ diff --git a/web/profiles/custom/os2loop/themes/os2loop_theme/templates/form/form-element--edit-sort-by--2.html.twig b/web/profiles/custom/os2loop/themes/os2loop_theme/templates/form/form-element--edit-sort-by--2.html.twig index 1b3ec88eb..49e3dd12d 100644 --- a/web/profiles/custom/os2loop/themes/os2loop_theme/templates/form/form-element--edit-sort-by--2.html.twig +++ b/web/profiles/custom/os2loop/themes/os2loop_theme/templates/form/form-element--edit-sort-by--2.html.twig @@ -47,7 +47,7 @@ */ #} {% set classes = [ - 'col bg-light ml-4 pt-2 collapse show search-filters-collapse', + 'col bg-light ml-4 pt-2 d-none', 'form-item', 'js-form-item', 'form-type-' ~ type|clean_class, diff --git a/web/profiles/custom/os2loop/themes/os2loop_theme/templates/form/form-element--edit-sort-order--2.html.twig b/web/profiles/custom/os2loop/themes/os2loop_theme/templates/form/form-element--edit-sort-order--2.html.twig index 1be6556e3..1b1ffd7a7 100644 --- a/web/profiles/custom/os2loop/themes/os2loop_theme/templates/form/form-element--edit-sort-order--2.html.twig +++ b/web/profiles/custom/os2loop/themes/os2loop_theme/templates/form/form-element--edit-sort-order--2.html.twig @@ -47,7 +47,7 @@ */ #} {% set classes = [ - 'col bg-light mr-4 pt-2 collapse show search-filters-collapse', + 'col bg-light mr-4 pt-2 d-none', 'form-item', 'js-form-item', 'form-type-' ~ type|clean_class, diff --git a/web/profiles/custom/os2loop/themes/os2loop_theme/templates/views/no-result-views-os2loop-search-db.html.twig b/web/profiles/custom/os2loop/themes/os2loop_theme/templates/views/no-result-views-os2loop-search-db.html.twig new file mode 100644 index 000000000..d34905893 --- /dev/null +++ b/web/profiles/custom/os2loop/themes/os2loop_theme/templates/views/no-result-views-os2loop-search-db.html.twig @@ -0,0 +1,18 @@ +{% set os2loop_settings = get_os2loop_config('os2loop_settings.settings') %} + +
+
+

{{ 'Unfortunately your search yielded no result.'|t }}

+
{{ 'Check that you have spelled correctly or try another search term.'|t }}
+
+ {% if os2loop_settings.node_type.os2loop_question %} +
+
+

{{ 'Do you need answers to a question?'|t }}

+
{{ 'You can create a new question by pressing the button below.'|t }}
+
+ + {% endif %} +
diff --git a/web/profiles/custom/os2loop/themes/os2loop_theme/templates/views/views-view--os2loop-search-db.html.twig b/web/profiles/custom/os2loop/themes/os2loop_theme/templates/views/views-view--os2loop-search-db.html.twig new file mode 100644 index 000000000..339b267a3 --- /dev/null +++ b/web/profiles/custom/os2loop/themes/os2loop_theme/templates/views/views-view--os2loop-search-db.html.twig @@ -0,0 +1,67 @@ +{# +/** + * @file + * Default theme implementation for main view template. + * + * Available variables: + * - attributes: Remaining HTML attributes for the element. + * - css_name: A CSS-safe version of the view name. + * - css_class: The user-specified classes names, if any. + * - header: The optional header. + * - footer: The optional footer. + * - rows: The results of the view query, if any. + * - empty: The content to display if there are no rows. + * - pager: The optional pager next/prev links to display. + * - exposed: Exposed widget form/info to display. + * - feed_icons: Optional feed icons to display. + * - more: An optional link to the next page of results. + * - title: Title of the view, only used when displaying in the admin preview. + * - title_prefix: Additional output populated by modules, intended to be + * displayed in front of the view title. + * - title_suffix: Additional output populated by modules, intended to be + * displayed after the view title. + * - attachment_before: An optional attachment view to be displayed before the + * view content. + * - attachment_after: An optional attachment view to be displayed after the + * view content. + * - dom_id: Unique id for every view being printed to give unique class for + * JavaScript. + * + * @see template_preprocess_views_view() + * + * @ingroup themeable + */ +#} +{% set classes = [ + dom_id ? 'js-view-dom-id-' ~ dom_id, + ] %} + + {{ title_prefix }} + {{ title }} + {{ title_suffix }} + + {% if header %} +
+ {{ header }} +
+ {% endif %} + + {{ exposed }} + {{ attachment_before }} + + {% if rows -%} + {{ rows }} + {% elseif empty -%} + {% include '@os2loop_theme/views/no-result-views-os2loop-search-db.html.twig' %} + {% endif %} + {{ pager }} + + {{ attachment_after }} + {{ more }} + + {% if footer %} + + {% endif %} +