added country name to sapi index

This commit is contained in:
Bachir Soussi Chiadmi 2021-10-11 21:35:29 +02:00
parent ed48f145dc
commit 14f2e4a9aa
4 changed files with 99 additions and 24 deletions

View File

@ -4,16 +4,15 @@ status: true
dependencies: dependencies:
module: module:
- search_api_solr - search_api_solr
- materio_sapi
- taxonomy - taxonomy
- node - node
- materio_sapi
- synonyms - synonyms
- search_api - search_api
- address - address
config: config:
- field.storage.node.body - field.storage.node.body
- field.storage.node.field_distributor - field.storage.node.field_distributor
- field.storage.taxonomy_term.field_public_address
- field.storage.node.field_famille - field.storage.node.field_famille
- field.storage.node.field_manufacturer - field.storage.node.field_manufacturer
- field.storage.node.field_reference - field.storage.node.field_reference
@ -68,28 +67,15 @@ name: database
description: '' description: ''
read_only: false read_only: false
field_settings: field_settings:
country_code: field_country_name_computed:
label: 'Manufacturer » Terme de taxonomie » Address » The two-letter country code' label: 'Country Name'
datasource_id: 'entity:node' datasource_id: 'entity:node'
property_path: 'field_manufacturer:entity:field_public_address:country_code' property_path: field_country_name_computed
type: solr_text_wstoken type: 'solr_text_custom:edgeasciistring'
boost: !!float 3
dependencies: dependencies:
config:
- field.storage.node.field_manufacturer
- field.storage.taxonomy_term.field_public_address
module: module:
- taxonomy - materio_sapi
country_code_1:
label: 'Distributor » Terme de taxonomie » Address » The two-letter country code'
datasource_id: 'entity:node'
property_path: 'field_distributor:entity:field_public_address:country_code'
type: solr_text_wstoken
dependencies:
config:
- field.storage.node.field_distributor
- field.storage.taxonomy_term.field_public_address
module:
- taxonomy
field_famille: field_famille:
label: Famille label: Famille
datasource_id: 'entity:node' datasource_id: 'entity:node'
@ -428,8 +414,7 @@ processor_settings:
html_filter: html_filter:
all_fields: true all_fields: true
fields: fields:
- country_code - field_country_name_computed
- country_code_1
- field_famille - field_famille
- field_reference - field_reference
- field_short_description - field_short_description

View File

@ -70,6 +70,7 @@ function materio_sapi_preprocess_fieldset(&$variables) {
// ? https://happyculture.coop/blog/drupal-8-declarer-un-champ-extrafield-calcule-computed-field // ? https://happyculture.coop/blog/drupal-8-declarer-un-champ-extrafield-calcule-computed-field
// ? https://fivejars.com/blog/entity-basefielddefinitions-fields-examples-drupal-8
/** /**
* Implements hook_entity_bundle_field_info(). * Implements hook_entity_bundle_field_info().
*/ */
@ -86,8 +87,25 @@ function materio_sapi_entity_bundle_field_info(\Drupal\Core\Entity\EntityTypeInt
->setClass('\Drupal\materio_sapi\ThesaurusRefComputed') ->setClass('\Drupal\materio_sapi\ThesaurusRefComputed')
->setDisplayConfigurable('view', FALSE); ->setDisplayConfigurable('view', FALSE);
} }
} $fields["field_country_name_computed"] = \Drupal\Core\Field\BaseFieldDefinition::create('string')
->setLabel(t("Country Name"))
->setComputed(TRUE)
->setTranslatable(TRUE)
->setClass('\Drupal\materio_sapi\CountryNameNodeComputed')
->setDisplayConfigurable('view', FALSE);
}
} }
// if ($entity_type->id() == 'taxonomy_term') {
// if ($bundle == 'company') {
// $fields["field_country_name_computed"] = \Drupal\Core\Field\BaseFieldDefinition::create('string')
// ->setName('field_country_name_computed')
// ->setLabel(t("Country Name"))
// ->setComputed(TRUE)
// ->setTranslatable(TRUE)
// ->setClass('\Drupal\materio_sapi\CountryNameComputed')
// ->setDisplayConfigurable('view', FALSE);
// }
// }
return $fields; return $fields;
} }

View File

@ -0,0 +1,29 @@
<?php
namespace Drupal\materio_sapi;
use Drupal\Core\Field\FieldItemList;
use Drupal\Core\TypedData\ComputedItemListTrait;
class CountryNameComputed extends FieldItemList {
use ComputedItemListTrait;
protected function computeValue() {
$term = $this->getEntity();
$name = $term->getName();
$address = $term->get('field_public_address')->first();
if ($address) {
$country_code = $address->getCountryCode();
if ($country_code) {
$full_country_list = \Drupal::service('country_manager')->getList();
$country_name = $full_country_list[$country_code];
$lang = \Drupal::languageManager()->getCurrentLanguage()->getId();
$translated_markup = $country_name->render();
if($parent->id() == 5719){
$t="t";
}
$this->list[0] = $this->createItem(0, $translated_markup);
}
}
}
}

View File

@ -0,0 +1,43 @@
<?php
namespace Drupal\materio_sapi;
use Drupal\Core\Field\FieldItemList;
use Drupal\Core\TypedData\ComputedItemListTrait;
// use Drupal\Core\StringTranslation\TranslatableMarkup;
class CountryNameNodeComputed extends FieldItemList {
use ComputedItemListTrait;
protected function computeValue() {
$node = $this->getEntity();
$node_lang_code = $node->language()->getId();
// $distrib = $node->get('field_distributor')->referencedEntities();
// $manuf = $node->get('field_manufacturer')->referencedEntities();
$companies = array_merge($node->get('field_distributor')->referencedEntities(), $node->get('field_manufacturer')->referencedEntities());
$country_codes = [];
foreach ($companies as $term) {
$address = $term->get('field_public_address')->first();
if ($address) {
$country_code = $address->getCountryCode();
if (!in_array($country_code, $country_codes)){
$country_codes[] = $country_code;
}
}
}
if (count($country_codes)) {
$full_country_list = \Drupal::service('country_manager')->getList();
foreach ($country_codes as $i => $country_code) {
/** Drupal\Core\StringTranslation\TranslatableMarkup **/
$country_name = $full_country_list[$country_code];
// $country_name->options['langcode'] = $this->langcode;
// $lang = \Drupal::languageManager()->getCurrentLanguage()->getId();
$untranslated = $country_name->getUntranslatedString();
// $translated = $country_name->render(['langcode' => $node_lang_code]);
$translated = t($untranslated, [], ['langcode'=>$node_lang_code]);
// $this->list[$i] = $this->createItem($i, "lang: $lang, node:$node_lang_code, $untranslated, $translated");
$this->list[$i] = $this->createItem($i, $translated);
}
}
}
}