degov-8.x-2.0/modules/degov_paragraph_node_reference/degov_paragraph_node_reference.module

modules/degov_paragraph_node_reference/degov_paragraph_node_reference.module
<?php

use Drupal\degov_common\Common;
use Drupal\node\Entity\NodeType;
use Drupal\Core\Form\FormStateInterface;

/**
 * Implements hook_preprocess().
 */
function degov_paragraph_node_reference_preprocess(&$variables, $hook, &$info) {
  // Add template suggestions and libraries implemented in this module.
  Common::addThemeSuggestions($variables, $hook, $info, [
    'module_name' => 'degov_paragraph_node_reference',
    'entity_type' => 'paragraph',
    'entity_bundles' => ['node_reference'],
    'entity_view_modes' => ['default', 'preview'],
  ]);
}

/**
 * Implements hook_modules_installed().
 * @param $modules
 */
function degov_paragraph_node_reference_modules_installed($modules) {
  if (in_array('degov_paragraph_node_reference', $modules)) {
    // Set target bundles.
    _degov_node_reference_bundle_list();
  }
}

/**
 * Update field reference target bundles.
 */
function _degov_node_reference_bundle_list() {
  $enabled_bundles = [];
  $node_types = NodeType::loadMultiple();
  /** @var \Drupal\node\NodeTypeInterface $node_type */
  foreach ($node_types as $node_type) {
    $enabled_bundles[$node_type->id()] = $node_type->id();
  }
  if (!empty($enabled_bundles)) {
    // Load the configuration for node_reference field storage.
    $config = \Drupal::configFactory()
      ->getEditable('field.field.paragraph.node_reference.field_node_reference_nodes');
    $settings = $config->get('settings');
    $settings['handler_settings']['target_bundles'] = $enabled_bundles;
    $config->set('settings', $settings);
    $config->save(TRUE);
  } else {
    drupal_set_message(t('There are no content types available'), 'warning');
  }
}

/**
 * Implements hook_field_widget_form_alter().
 */
function degov_paragraph_node_reference_field_widget_form_alter(&$element, FormStateInterface $form_state, $context) {
  /** @var \Drupal\Core\Field\WidgetBase $widget */
  $widget = $context['widget'];

  // Only allow view modes whose machine names begin with "teaser".
  if ($widget->getPluginId() === 'entity_reference_paragraphs' && !empty($element['subform']['field_node_reference_viewmode'])) {
    $enabled_view_modes = \Drupal::config('degov_paragraph_node_reference.settings')
      ->get('enabled_view_modes');
    $element['subform']['field_node_reference_viewmode']['widget']['#options'] = array_filter($element['subform']['field_node_reference_viewmode']['widget']['#options'], function ($key) use ($enabled_view_modes) {
      return isset($enabled_view_modes[$key]) && $enabled_view_modes[$key] === $key;
    }, ARRAY_FILTER_USE_KEY);
  }
}

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

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