on home display count villes & themes #1306. Added programme's logo from content (instead of css #1415

This commit is contained in:
Bachir Soussi Chiadmi 2021-08-16 22:31:53 +02:00
parent bd9097d48a
commit 45fc1bd57a
10 changed files with 507 additions and 23 deletions

View File

@ -97,6 +97,8 @@ content:
settings: { }
third_party_settings: { }
hidden:
computed_projets_reference: true
computed_themes_reference: true
field_actif: true
field_poid: true
langcode: true

View File

@ -112,6 +112,7 @@ module:
persistent_login: 0
popsu_link_block: 0
popsu_migrate: 0
popsu_programme: 0
redirect: 0
redis: 0
responsive_image: 0

View File

@ -3,12 +3,13 @@ langcode: fr
status: true
dependencies:
config:
- field.storage.node.field_diaporama
- image.style.medium
- field.storage.node.field_logo
- image.style.large
- node.type.programme
module:
- image
- node
- popsu_programme
- user
id: programmes
label: Programmes
@ -358,6 +359,9 @@ display:
title: false
header: false
fields: false
relationships: false
filters: false
filter_groups: false
block_category: 'home (Views)'
header:
result:
@ -371,6 +375,70 @@ display:
content: '@total programmes actifs'
plugin_id: result
fields:
field_logo:
id: field_logo
table: node__field_logo
field: field_logo
relationship: none
group_type: group
admin_label: ''
label: ''
exclude: false
alter:
alter_text: false
text: ''
make_link: false
path: ''
absolute: false
external: false
replace_spaces: false
path_case: none
trim_whitespace: false
alt: ''
rel: ''
link_class: ''
prefix: ''
suffix: ''
target: ''
nl2br: false
max_length: 0
word_boundary: true
ellipsis: true
more_link: false
more_link_text: ''
more_link_path: ''
strip_tags: false
trim: false
preserve_tags: ''
html: false
element_type: ''
element_class: ''
element_label_type: ''
element_label_class: ''
element_label_colon: false
element_wrapper_type: ''
element_wrapper_class: ''
element_default_classes: true
empty: ''
hide_empty: false
empty_zero: false
hide_alter_empty: true
click_sort_column: target_id
type: image
settings:
image_style: large
image_link: content
group_column: ''
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
plugin_id: field
title:
id: title
table: node_field_data
@ -434,10 +502,10 @@ display:
separator: ', '
field_api_classes: false
plugin_id: field
field_diaporama:
id: field_diaporama
table: node__field_diaporama
field: field_diaporama
computed_projets_reference:
id: computed_projets_reference
table: node
field: computed_projets_reference
relationship: none
group_type: group
admin_label: ''
@ -482,22 +550,127 @@ display:
hide_empty: false
empty_zero: false
hide_alter_empty: true
click_sort_column: target_id
type: image
settings:
image_style: medium
image_link: content
group_column: ''
group_columns: { }
group_rows: true
delta_limit: 1
delta_offset: 0
delta_reversed: false
delta_first_last: false
multi_type: separator
separator: ', '
field_api_classes: false
plugin_id: field
entity_type: node
plugin_id: views_computed_projets_reference
computed_themes_reference:
id: computed_themes_reference
table: node
field: computed_themes_reference
relationship: none
group_type: group
admin_label: ''
label: ''
exclude: false
alter:
alter_text: false
text: ''
make_link: false
path: ''
absolute: false
external: false
replace_spaces: false
path_case: none
trim_whitespace: false
alt: ''
rel: ''
link_class: ''
prefix: ''
suffix: ''
target: ''
nl2br: false
max_length: 0
word_boundary: true
ellipsis: true
more_link: false
more_link_text: ''
more_link_path: ''
strip_tags: false
trim: false
preserve_tags: ''
html: false
element_type: ''
element_class: ''
element_label_type: ''
element_label_class: ''
element_label_colon: false
element_wrapper_type: ''
element_wrapper_class: ''
element_default_classes: true
empty: ''
hide_empty: false
empty_zero: false
hide_alter_empty: true
entity_type: node
plugin_id: views_computed_themes_reference
relationships: { }
filters:
status:
value: '1'
table: node_field_data
field: status
plugin_id: boolean
entity_type: node
entity_field: status
id: status
expose:
operator: ''
operator_limit_selection: false
operator_list: { }
group: 1
type:
id: type
table: node_field_data
field: type
value:
programme: programme
entity_type: node
entity_field: type
plugin_id: bundle
expose:
operator_limit_selection: false
operator_list: { }
field_actif_value:
id: field_actif_value
table: node__field_actif
field: field_actif_value
relationship: none
group_type: group
admin_label: ''
operator: '='
value: '1'
group: 1
exposed: false
expose:
operator_id: ''
label: ''
description: ''
use_operator: false
operator: ''
operator_limit_selection: false
operator_list: { }
identifier: ''
required: false
remember: false
multiple: false
remember_roles:
authenticated: authenticated
is_grouped: false
group_info:
label: ''
description: ''
identifier: ''
optional: true
widget: select
multiple: false
remember: false
default_group: All
default_group_multiple: { }
group_items: { }
plugin_id: boolean
filter_groups:
operator: AND
groups:
1: AND
cache_metadata:
max-age: -1
contexts:
@ -506,4 +679,4 @@ display:
- 'user.node_grants:view'
- user.permissions
tags:
- 'config:field.storage.node.field_diaporama'
- 'config:field.storage.node.field_logo'

View File

@ -0,0 +1,6 @@
views.field.view_computed_themes_reference:
type: views_field
label: 'Computed Themes Reference'
views.field.view_computed_projets_reference:
type: views_field
label: 'Computed Projets Reference'

View File

@ -0,0 +1,6 @@
name: Popsu Programme
type: module
description: misc plugins for popsu's programmes.
core_version_requirement: ^8.8 || ^9
package: Popsu
dependencies:

View File

@ -0,0 +1,88 @@
<?php
use Drupal\Core\Entity\EntityTypeInterface;
use Drupal\Core\Field\BaseFieldDefinition;
use Drupal\Core\Field\FieldStorageDefinitionInterface;
// https://www.drupal.org/project/drupal/issues/2916266#comment-12301574
/**
* Implement hook_entity_bundle_field_info().
*
* @param EntityTypeInterface $entity_type
* @param $bundle
* @param array $base_field_definitions
* @return array
*/
function popsu_programme_entity_bundle_field_info(EntityTypeInterface $entity_type, $bundle, array $base_field_definitions) {
// function materio_home_entity_base_field_info_alter(&$fields, EntityTypeInterface $entity_type) {
// $fields = array();
// if ($entity_type->id() == 'node' && $bundle === 'frontpage') {
// \Drupal::logger('materio_home')->notice('bundle: '.$bundle);
if ($entity_type->id() == 'node' && $bundle == 'programme') {
$fields['computed_themes_references'] = BaseFieldDefinition::create('entity_reference')
->setName('computed_themes_references')
->setLabel(t('Computed Themes References'))
->setDescription(t('Computed Themes References.'))
// // The Entity Type this field belongs to.
->setTargetEntityTypeId($entity_type->id())
// // The Entity Type bundle this field belongs to.
->setTargetBundle($bundle)
->setSetting('target_type', 'node')
->setCardinality(FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED)
->setComputed(TRUE)
->setRevisionable(FALSE)
->setTranslatable(FALSE)
->setDisplayConfigurable('view', TRUE)
->setDisplayOptions('view', [
'label' => 'hidden',
'weight' => -5,
])
->setClass(\Drupal\popsu_programme\Plugin\Field\FieldType\ComputedThemesReferences::class);
$fields['computed_projets_references'] = BaseFieldDefinition::create('entity_reference')
->setName('computed_projets_references')
->setLabel(t('Computed Projets References'))
->setDescription(t('Computed Projets References.'))
// // The Entity Type this field belongs to.
->setTargetEntityTypeId($entity_type->id())
// // The Entity Type bundle this field belongs to.
->setTargetBundle($bundle)
->setSetting('target_type', 'node')
->setCardinality(FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED)
->setComputed(TRUE)
->setRevisionable(FALSE)
->setTranslatable(FALSE)
->setDisplayConfigurable('view', TRUE)
->setDisplayOptions('view', [
'label' => 'hidden',
'weight' => -5,
])
->setClass(\Drupal\popsu_programme\Plugin\Field\FieldType\ComputedProjetsReferences::class);
return $fields;
}
}
/**
* Implements hook_views_data_alter().
*/
function popsu_programme_views_data_alter(array &$data) {
if (isset($data['node'])) {
// Add the computed_themes_reference field to Views.
$data['node']['computed_themes_reference'] = [
'title' => t('Computed Theme References'),
'field' => [
'id' => 'views_computed_themes_reference',
],
];
// Add the computed_projets_reference field to Views.
$data['node']['computed_projets_reference'] = [
'title' => t('Computed Projets References'),
'field' => [
'id' => 'views_computed_projets_reference',
],
];
}
}

View File

@ -0,0 +1,58 @@
<?php
namespace Drupal\popsu_programme\Plugin\Field\FieldType;
use Drupal\Core\Entity\FieldableEntityInterface;
use Drupal\Core\Field\EntityReferenceFieldItemList;
use Drupal\Core\Field\EntityReferenceFieldItemListInterface;
use Drupal\Core\Field\FieldItemList;
use Drupal\Core\TypedData\TypedDataInterface;
use Drupal\Core\Field\BaseFieldDefinition;
use Drupal\Core\TypedData\ComputedItemListTrait;
// https://www.drupal.org/node/2112677
// https://www.cornel.co/article/entity-reference-computed-field-example-drupal
// https://www.caxy.com/blog/drupal-custom-form-and-computed-fields
class ComputedProjetsReferences extends EntityReferenceFieldItemList
{
use ComputedItemListTrait;
/**
* The entity type manager.
*
* @var \Drupal\Core\Entity\EntityTypeManagerInterface
*/
protected $entityTypeManager;
/**
* {@inheritdoc}
*/
public function __construct(BaseFieldDefinition $definition, $name, TypedDataInterface $parent) {
parent::__construct($definition, $name, $parent);
$this->entityTypeManager = \Drupal::entityTypeManager();
}
/**
* Compute the values.
*/
protected function computeValue() {
// $query = \Drupal::entityQuery('node')
$entity = $this->getEntity();
$storage = \Drupal::service('entity_type.manager')->getStorage('node');
$query = $storage->getQuery()
->condition('status', 1)
->condition('type', 'projet')
->condition('field_programme', $entity->id());
$results = $query->execute();
if ($results) {
$nids = array_values($results);
$i = 0;
foreach ($nids as $key => $nid) {
$this->list[$i] = $this->createItem($i, $nid);
$i++;
}
}
}
}

View File

@ -0,0 +1,58 @@
<?php
namespace Drupal\popsu_programme\Plugin\Field\FieldType;
use Drupal\Core\Entity\FieldableEntityInterface;
use Drupal\Core\Field\EntityReferenceFieldItemList;
use Drupal\Core\Field\EntityReferenceFieldItemListInterface;
use Drupal\Core\Field\FieldItemList;
use Drupal\Core\TypedData\TypedDataInterface;
use Drupal\Core\Field\BaseFieldDefinition;
use Drupal\Core\TypedData\ComputedItemListTrait;
// https://www.drupal.org/node/2112677
// https://www.cornel.co/article/entity-reference-computed-field-example-drupal
// https://www.caxy.com/blog/drupal-custom-form-and-computed-fields
class ComputedThemesReferences extends EntityReferenceFieldItemList
{
use ComputedItemListTrait;
/**
* The entity type manager.
*
* @var \Drupal\Core\Entity\EntityTypeManagerInterface
*/
protected $entityTypeManager;
/**
* {@inheritdoc}
*/
public function __construct(BaseFieldDefinition $definition, $name, TypedDataInterface $parent) {
parent::__construct($definition, $name, $parent);
$this->entityTypeManager = \Drupal::entityTypeManager();
}
/**
* Compute the values.
*/
protected function computeValue() {
// $query = \Drupal::entityQuery('node')
$entity = $this->getEntity();
$storage = \Drupal::service('entity_type.manager')->getStorage('node');
$query = $storage->getQuery()
->condition('status', 1)
->condition('type', 'theme')
->condition('field_programme', $entity->id());
$results = $query->execute();
if ($results) {
$nids = array_values($results);
$i = 0;
foreach ($nids as $key => $nid) {
$this->list[$i] = $this->createItem($i, $nid);
$i++;
}
}
}
}

View File

@ -0,0 +1,46 @@
<?php
namespace Drupal\popsu_programme\Plugin\views\field;
use Drupal\views\ResultRow;
use Drupal\views\Plugin\views\field\FieldPluginBase;
/**
* A handler to provide proper displays for profile current company.
*
* @ingroup views_field_handlers
*
* @ViewsField("views_computed_projets_reference")
*/
class ViewsComputedProjetsReference extends FieldPluginBase {
/**
* {@inheritdoc}
*/
public function render(ResultRow $values) {
$relationship_entities = $values->_relationship_entities;
$projets = null;
// First check the referenced entity.
if (isset($relationship_entities['node'])) {
$node = $relationship_entities['node'];
}
else {
$node = $values->_entity;
}
$type = get_class($node);
if ($type === 'Drupal\node\Entity\Node') {
$projets = $node->get('computed_projets_references')->getvalue();
}
return count($projets) . ' villes';
}
/**
* {@inheritdoc}
*/
public function query() {
// This function exists to override parent query function.
// Do nothing.
}
}

View File

@ -0,0 +1,46 @@
<?php
namespace Drupal\popsu_programme\Plugin\views\field;
use Drupal\views\ResultRow;
use Drupal\views\Plugin\views\field\FieldPluginBase;
/**
* A handler to provide proper displays for profile current company.
*
* @ingroup views_field_handlers
*
* @ViewsField("views_computed_themes_reference")
*/
class ViewsComputedThemesReference extends FieldPluginBase {
/**
* {@inheritdoc}
*/
public function render(ResultRow $values) {
$relationship_entities = $values->_relationship_entities;
$themes = null;
// First check the referenced entity.
if (isset($relationship_entities['node'])) {
$node = $relationship_entities['node'];
}
else {
$node = $values->_entity;
}
$type = get_class($node);
if ($type === 'Drupal\node\Entity\Node') {
$themes = $node->get('computed_themes_references')->getvalue();
}
return count($themes) . ' themes';
}
/**
* {@inheritdoc}
*/
public function query() {
// This function exists to override parent query function.
// Do nothing.
}
}