added synonyms to search autocomplete and results, improved collection admin view
This commit is contained in:
@@ -93,6 +93,8 @@ class EdlpSearchController extends ControllerBase {
|
|||||||
$response = new JsonResponse($this->matches);
|
$response = new JsonResponse($this->matches);
|
||||||
return $response;
|
return $response;
|
||||||
|
|
||||||
|
// dpm($this->matches, 'matches');
|
||||||
|
//
|
||||||
// return array(
|
// return array(
|
||||||
// "#markup" => "autocomplete"
|
// "#markup" => "autocomplete"
|
||||||
// );
|
// );
|
||||||
@@ -132,32 +134,45 @@ class EdlpSearchController extends ControllerBase {
|
|||||||
$query->keys($this->keys);
|
$query->keys($this->keys);
|
||||||
}
|
}
|
||||||
|
|
||||||
// select the field in which search will be performed
|
|
||||||
$query->setFulltextFields(array($this->field_name));
|
if(null !== $this->field_synonyms){
|
||||||
|
// select the taxo field AND the synonym field in which search will be performed
|
||||||
|
$query->setFulltextFields(array($this->field_name, $this->field_synonyms));
|
||||||
|
}else{
|
||||||
|
// OR select the unique taxo field in which search will be performed
|
||||||
|
$query->setFulltextFields(array($this->field_name));
|
||||||
|
}
|
||||||
|
|
||||||
$result = $query->execute();
|
$result = $query->execute();
|
||||||
$items = $result->getResultItems();
|
$items = $result->getResultItems();
|
||||||
|
|
||||||
$this->matches = [];
|
$this->matches = [];
|
||||||
foreach ($items as $item) {
|
foreach ($items as $item) {
|
||||||
|
// get the field from item
|
||||||
try {
|
try {
|
||||||
/** @var \Drupal\Core\Entity\EntityInterface $entity */
|
/** @var \Drupal\Core\Entity\EntityInterface $entity */
|
||||||
$fields = $item->getField($this->field_name)->getValues();
|
$fields = $item->getField($this->field_name)->getValues();
|
||||||
}catch (SearchApiException $e) {
|
}catch (SearchApiException $e) {
|
||||||
|
// if error on getinfg the field, skip item
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
// if no fields returned, skip item
|
||||||
if (!$fields) {
|
if (!$fields) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// get field content
|
||||||
$field_text = $fields[0]->getText();
|
$field_text = $fields[0]->getText();
|
||||||
|
|
||||||
|
// if content already in matches, skip item
|
||||||
if( in_array($field_text, $this->matches) ){
|
if( in_array($field_text, $this->matches) ){
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// add the item to the return list
|
||||||
$this->matches[] = $field_text;
|
$this->matches[] = $field_text;
|
||||||
|
|
||||||
|
// do not return more than 14 items
|
||||||
if(count($this->matches) > 14){
|
if(count($this->matches) > 14){
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -169,8 +184,12 @@ class EdlpSearchController extends ControllerBase {
|
|||||||
* getRequestArgs
|
* getRequestArgs
|
||||||
*/
|
*/
|
||||||
private function getRequestAutocompleteArgs(){
|
private function getRequestAutocompleteArgs(){
|
||||||
|
// args are provided by form definition with autocomplete_route_parameters
|
||||||
// dpm($this->request);
|
// dpm($this->request);
|
||||||
$this->field_name = $this->request->query->get('field_name');
|
$this->field_name = $this->request->query->get('field_name');
|
||||||
|
// if($this->request->query->get('field_synonyms')){
|
||||||
|
$this->field_synonyms = $this->request->query->get('field_synonyms');
|
||||||
|
// }
|
||||||
$this->keys = $this->request->query->get('q');
|
$this->keys = $this->request->query->get('q');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ class EdlpSearchForm extends FormBase {
|
|||||||
'genres' => [
|
'genres' => [
|
||||||
'#type' => 'textfield',
|
'#type' => 'textfield',
|
||||||
'#autocomplete_route_name' => 'edlp_search.edlp_search_controller_autocomplete',
|
'#autocomplete_route_name' => 'edlp_search.edlp_search_controller_autocomplete',
|
||||||
'#autocomplete_route_parameters' => array('field_name' => 'field_genres'),
|
'#autocomplete_route_parameters' => array('field_name' => 'field_genres', 'field_synonyms' => 'field_synonyms'),
|
||||||
'#maxlength' => 20,
|
'#maxlength' => 20,
|
||||||
'#size' => 15,
|
'#size' => 15,
|
||||||
'#weight' => '0',
|
'#weight' => '0',
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ dependencies:
|
|||||||
- field.storage.node.field_workflow
|
- field.storage.node.field_workflow
|
||||||
- field.storage.node.field_genres
|
- field.storage.node.field_genres
|
||||||
- field.storage.node.field_langues
|
- field.storage.node.field_langues
|
||||||
|
- field.storage.taxonomy_term.field_synonyms
|
||||||
- search_api.server.edlp_db
|
- search_api.server.edlp_db
|
||||||
module:
|
module:
|
||||||
- taxonomy
|
- taxonomy
|
||||||
@@ -138,6 +139,17 @@ field_settings:
|
|||||||
- field.storage.node.field_langues
|
- field.storage.node.field_langues
|
||||||
module:
|
module:
|
||||||
- taxonomy
|
- taxonomy
|
||||||
|
field_synonyms:
|
||||||
|
label: 'Genre(s) » Taxonomy term » Synonyms'
|
||||||
|
datasource_id: 'entity:node'
|
||||||
|
property_path: 'field_genres:entity:field_synonyms'
|
||||||
|
type: text
|
||||||
|
dependencies:
|
||||||
|
config:
|
||||||
|
- field.storage.node.field_genres
|
||||||
|
- field.storage.taxonomy_term.field_synonyms
|
||||||
|
module:
|
||||||
|
- taxonomy
|
||||||
datasource_settings:
|
datasource_settings:
|
||||||
'entity:node':
|
'entity:node':
|
||||||
bundles:
|
bundles:
|
||||||
@@ -161,6 +173,7 @@ processor_settings:
|
|||||||
- name
|
- name
|
||||||
- field_genres
|
- field_genres
|
||||||
- field_langues
|
- field_langues
|
||||||
|
- field_synonyms
|
||||||
spaces: ''
|
spaces: ''
|
||||||
overlap_cjk: 1
|
overlap_cjk: 1
|
||||||
minimum_word_size: '3'
|
minimum_word_size: '3'
|
||||||
@@ -200,6 +213,7 @@ processor_settings:
|
|||||||
- name
|
- name
|
||||||
- field_genres
|
- field_genres
|
||||||
- field_langues
|
- field_langues
|
||||||
|
- field_synonyms
|
||||||
stopwords:
|
stopwords:
|
||||||
- a
|
- a
|
||||||
- an
|
- an
|
||||||
@@ -251,6 +265,7 @@ processor_settings:
|
|||||||
- field_workflow
|
- field_workflow
|
||||||
- field_genres
|
- field_genres
|
||||||
- field_langues
|
- field_langues
|
||||||
|
- field_synonyms
|
||||||
weights:
|
weights:
|
||||||
preprocess_index: -20
|
preprocess_index: -20
|
||||||
preprocess_query: -20
|
preprocess_query: -20
|
||||||
@@ -266,6 +281,7 @@ processor_settings:
|
|||||||
- field_workflow
|
- field_workflow
|
||||||
- field_genres
|
- field_genres
|
||||||
- field_langues
|
- field_langues
|
||||||
|
- field_synonyms
|
||||||
weights:
|
weights:
|
||||||
preprocess_index: -20
|
preprocess_index: -20
|
||||||
preprocess_query: -20
|
preprocess_query: -20
|
||||||
|
|||||||
@@ -28,6 +28,8 @@ dependencies:
|
|||||||
- node.type.page
|
- node.type.page
|
||||||
- node.type.static
|
- node.type.static
|
||||||
- taxonomy.vocabulary.entrees
|
- taxonomy.vocabulary.entrees
|
||||||
|
- taxonomy.vocabulary.genres
|
||||||
|
- taxonomy.vocabulary.langues
|
||||||
- taxonomy.vocabulary.page_type
|
- taxonomy.vocabulary.page_type
|
||||||
- user.role.admin
|
- user.role.admin
|
||||||
- user.role.collectionneur
|
- user.role.collectionneur
|
||||||
@@ -2172,6 +2174,104 @@ display:
|
|||||||
entity_type: node
|
entity_type: node
|
||||||
entity_field: langcode
|
entity_field: langcode
|
||||||
plugin_id: language
|
plugin_id: language
|
||||||
|
field_genres_target_id:
|
||||||
|
id: field_genres_target_id
|
||||||
|
table: node__field_genres
|
||||||
|
field: field_genres_target_id
|
||||||
|
relationship: none
|
||||||
|
group_type: group
|
||||||
|
admin_label: ''
|
||||||
|
operator: or
|
||||||
|
value: { }
|
||||||
|
group: 1
|
||||||
|
exposed: true
|
||||||
|
expose:
|
||||||
|
operator_id: field_genres_target_id_op
|
||||||
|
label: 'Genre(s) (field_genres)'
|
||||||
|
description: ''
|
||||||
|
use_operator: false
|
||||||
|
operator: field_genres_target_id_op
|
||||||
|
identifier: field_genres_target_id
|
||||||
|
required: false
|
||||||
|
remember: false
|
||||||
|
multiple: false
|
||||||
|
remember_roles:
|
||||||
|
authenticated: authenticated
|
||||||
|
anonymous: '0'
|
||||||
|
collectionneur: '0'
|
||||||
|
admin: '0'
|
||||||
|
root: '0'
|
||||||
|
invite: '0'
|
||||||
|
user: '0'
|
||||||
|
reduce: false
|
||||||
|
is_grouped: false
|
||||||
|
group_info:
|
||||||
|
label: ''
|
||||||
|
description: ''
|
||||||
|
identifier: ''
|
||||||
|
optional: true
|
||||||
|
widget: select
|
||||||
|
multiple: false
|
||||||
|
remember: false
|
||||||
|
default_group: All
|
||||||
|
default_group_multiple: { }
|
||||||
|
group_items: { }
|
||||||
|
reduce_duplicates: false
|
||||||
|
type: textfield
|
||||||
|
limit: true
|
||||||
|
vid: genres
|
||||||
|
hierarchy: false
|
||||||
|
error_message: true
|
||||||
|
plugin_id: taxonomy_index_tid
|
||||||
|
field_langues_target_id:
|
||||||
|
id: field_langues_target_id
|
||||||
|
table: node__field_langues
|
||||||
|
field: field_langues_target_id
|
||||||
|
relationship: none
|
||||||
|
group_type: group
|
||||||
|
admin_label: ''
|
||||||
|
operator: or
|
||||||
|
value: { }
|
||||||
|
group: 1
|
||||||
|
exposed: true
|
||||||
|
expose:
|
||||||
|
operator_id: field_langues_target_id_op
|
||||||
|
label: 'Langue(s) (field_langues)'
|
||||||
|
description: ''
|
||||||
|
use_operator: false
|
||||||
|
operator: field_langues_target_id_op
|
||||||
|
identifier: field_langues_target_id
|
||||||
|
required: false
|
||||||
|
remember: false
|
||||||
|
multiple: false
|
||||||
|
remember_roles:
|
||||||
|
authenticated: authenticated
|
||||||
|
anonymous: '0'
|
||||||
|
collectionneur: '0'
|
||||||
|
admin: '0'
|
||||||
|
root: '0'
|
||||||
|
invite: '0'
|
||||||
|
user: '0'
|
||||||
|
reduce: false
|
||||||
|
is_grouped: false
|
||||||
|
group_info:
|
||||||
|
label: ''
|
||||||
|
description: ''
|
||||||
|
identifier: ''
|
||||||
|
optional: true
|
||||||
|
widget: select
|
||||||
|
multiple: false
|
||||||
|
remember: false
|
||||||
|
default_group: All
|
||||||
|
default_group_multiple: { }
|
||||||
|
group_items: { }
|
||||||
|
reduce_duplicates: false
|
||||||
|
type: textfield
|
||||||
|
limit: true
|
||||||
|
vid: langues
|
||||||
|
hierarchy: false
|
||||||
|
error_message: true
|
||||||
|
plugin_id: taxonomy_index_tid
|
||||||
defaults:
|
defaults:
|
||||||
filters: false
|
filters: false
|
||||||
filter_groups: false
|
filter_groups: false
|
||||||
|
|||||||
@@ -867,10 +867,12 @@ display:
|
|||||||
defaults:
|
defaults:
|
||||||
filters: false
|
filters: false
|
||||||
filter_groups: false
|
filter_groups: false
|
||||||
|
title: false
|
||||||
filter_groups:
|
filter_groups:
|
||||||
operator: AND
|
operator: AND
|
||||||
groups:
|
groups:
|
||||||
1: AND
|
1: AND
|
||||||
|
title: Entrees
|
||||||
cache_metadata:
|
cache_metadata:
|
||||||
max-age: -1
|
max-age: -1
|
||||||
contexts:
|
contexts:
|
||||||
@@ -1069,6 +1071,7 @@ display:
|
|||||||
fields: false
|
fields: false
|
||||||
filters: false
|
filters: false
|
||||||
filter_groups: false
|
filter_groups: false
|
||||||
|
title: false
|
||||||
filters:
|
filters:
|
||||||
vid:
|
vid:
|
||||||
id: vid
|
id: vid
|
||||||
@@ -1243,6 +1246,7 @@ display:
|
|||||||
operator: AND
|
operator: AND
|
||||||
groups:
|
groups:
|
||||||
1: AND
|
1: AND
|
||||||
|
title: Genres
|
||||||
cache_metadata:
|
cache_metadata:
|
||||||
max-age: -1
|
max-age: -1
|
||||||
contexts:
|
contexts:
|
||||||
|
|||||||
Reference in New Issue
Block a user