crossword-8.x-1.x-dev/modules/crossword_pseudofields/crossword_pseudofields.module

modules/crossword_pseudofields/crossword_pseudofields.module
<?php

/**
 * @file
 * Hooks for crossword pseudofields.
 */

use Drupal\Core\Entity\Display\EntityViewDisplayInterface;
use Drupal\node\Entity\NodeType;
use Drupal\node\NodeInterface;

/**
 * Implements hook_entity_extra_field_info().
 */
function crossword_pseudofields_entity_extra_field_info() {
  $extra = [];
  $pseudo_keys = [
    'title' => 'Title',
    'author' => 'Author',
    'notepad' => 'Notepad',
    'controls' => 'Controls',
    'active_clue' => 'Active Clue',
    'grid' => 'Grid',
    'across' => 'Clues Across',
    'down' => 'Clues Down',
    'playable' => 'Make it Playable/Interactive',
  ];
  $entityFieldManager = \Drupal::service('entity_field.manager');
  foreach (NodeType::loadMultiple() as $bundle) {
    $fields = $entityFieldManager->getFieldDefinitions('node', $bundle->id());
    foreach ($fields as $field) {
      if ($field->getType() == 'crossword') {
        foreach ($pseudo_keys as $key => $label) {
          $extra['node'][$bundle->id()]['display']["crossword_$key"] = [
            'label' => "{$field->getLabel()}: $label",
            'visible' => FALSE,
          ];
        }
        break;
      }
    }
  }

  return $extra;
}

/**
 * Implements hook_entity_view_alter().
 */
function crossword_pseudofields_node_view_alter(array &$build, NodeInterface $entity, EntityViewDisplayInterface $display) {
  $entityFieldManager = \Drupal::service('entity_field.manager');
  $fields = $entityFieldManager->getFieldDefinitions($entity->getEntityTypeId(), $entity->bundle());
  foreach ($fields as $field_machine_name => $field) {
    if ($field->getType() == 'crossword') {
      $pseudo_keys = [
        'title' => 'Title',
        'author' => 'Author',
        'notepad' => 'Notepad',
        'controls' => 'Controls',
        'active_clue' => 'Active Clue',
        'grid' => 'Grid',
        'across' => 'Clues Across',
        'down' => 'Clues Down',
        'playable' => 'Make it Playable',
      ];
      $config = \Drupal::config('crossword_pseudofields.settings');
      $settings = $config->get();
      $render = $entity->{$field_machine_name}->view([
        'type' => 'crossword_pseudofields',
        'label' => 'hidden',
        'settings' => $settings,
      ]);
      foreach ($pseudo_keys as $key => $label) {
        if ($component = $display->getComponent("crossword_$key")) {
          $build["crossword_$key"] = $render[$key];
          $build["crossword_$key"]['#weight'] = $component['weight'] ?? 0;
          $build["crossword_$key"]['#cache']['tags'] = array_merge($build["crossword_$key"]['#cache']['tags'] ?? [], $config->getCacheTags());
        }
      }
      break;
    }
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc