bricks-2.x-dev/modules/bricks_inline/bricks_inline.module

modules/bricks_inline/bricks_inline.module
<?php

/**
 * @file
 * {@inheritdoc}
 */

use Drupal\Core\Render\Element;

/**
 * Implements hook_theme_registry_alter().
 */
function bricks_inline_theme_registry_alter(&$theme_registry) {
  $theme_registry['inline_entity_form_entity_table']['theme path'] = \Drupal::service('extension.list.module')->getPath('bricks_inline');
  $theme_registry['inline_entity_form_entity_table']['function'] = 'bricks_inline_inline_entity_form_entity_table';
}

/**
 * Implements hook_inline_entity_form_reference_form_alter().
 */
function bricks_inline_inline_entity_form_reference_form_alter(&$reference_form, &$form_state) {
  // Skip standard IEF validation to allow multiple references to
  // the same entity:
  $reference_form['#element_validate'] = array_diff($reference_form['#element_validate'], ['inline_entity_form_reference_form_validate']);
}

/**
 * Prepares variables for theme_inline_entity_form_entity_table().
 */
function bricks_inline_preprocess_inline_entity_form_entity_table(&$variables) {
  _inline_entity_form_preprocess_inline_entity_form_entity_table($variables);

  if (!empty($variables['table']['#tabledrag'])) {
    _bricks_preprocess_tabledrag_form($variables, 'form', 'bricks_tree_inline', 'ief-entity-delta', TRUE);
  }
}

/**
 * Overrides theme_inline_entity_form_entity_table()
 * with a help from hook_theme_registry_alter().
 */
function bricks_inline_inline_entity_form_entity_table($variables) {
  if (!empty($variables['table'])) {
    return \Drupal::service('renderer')->render($variables['table']);
  }
}

/**
 * Hack: copy-and-paste from theme_inline_entity_form_entity_table().
 */
function _inline_entity_form_preprocess_inline_entity_form_entity_table(&$variables) {
  $renderer = \Drupal::service('renderer');
  $form = $variables['form'];
  $entity_type = $form['#entity_type'];

  $fields = $form['#table_fields'];
  $has_tabledrag = \Drupal::entityTypeManager()->getHandler($entity_type, 'inline_form')->isTableDragEnabled($form);

  // Sort the fields by weight.
  uasort($fields, '\Drupal\Component\Utility\SortArray::sortByWeightElement');

  $header = [];
  if ($has_tabledrag) {
    $header[] = ['data' => '', 'class' => ['ief-tabledrag-header']];
    $header[] = ['data' => t('Sort order'), 'class' => ['ief-sort-order-header']];
  }
  // Add header columns for each field.
  $first = TRUE;
  foreach ($fields as $field_name => $field) {
    $column = ['data' => $field['label']];
    // The first column gets a special class.
    if ($first) {
      $column['class'] = ['ief-first-column-header'];
      $first = FALSE;
    }
    $header[] = $column;
  }
  $header[] = [
    'data' => t('Operations'),
    'is_operation' => TRUE,
  ];

  // Build an array of entity rows for the table.
  $rows = [];
  foreach (Element::children($form) as $key) {
    /** @var \Drupal\Core\Entity\FieldableEntityInterface $entity */
    $entity = $form[$key]['#entity'];
    $row_classes = ['ief-row-entity'];
    $cells = [];
    if ($has_tabledrag) {
      $cells[] = ['data' => '', 'class' => ['ief-tabledrag-handle']];
      $cells[] = $renderer->render($form[$key]['delta']);
      $row_classes[] = 'draggable';
    }
    // Add a special class to rows that have a form underneath, to allow
    // for additional styling.
    if (!empty($form[$key]['form'])) {
      $row_classes[] = 'ief-row-entity-form';
    }

    foreach ($fields as $field_name => $field) {
      $data = '';
      if ($field['type'] == 'label') {
        $data = $variables['form'][$key]['#label'];
      }
      elseif ($field['type'] == 'field' && $entity->hasField($field_name)) {
        $display_options = ['label' => 'hidden'];
        if (isset($field['display_options'])) {
          $display_options += $field['display_options'];
        }
        $data = $entity->get($field_name)->view($display_options);
      }
      elseif ($field['type'] == 'callback') {
        $arguments = [
          'entity' => $entity,
          'variables' => $variables,
        ];
        if (isset($field['callback_arguments'])) {
          $arguments = array_merge($arguments, $field['callback_arguments']);
        }

        $data = call_user_func_array($field['callback'], array_values($arguments));
      }

      $cells[] = ['data' => $data, 'class' => ['inline-entity-form-' . $entity_type . '-' . $field_name]];
    }

    // Add the buttons belonging to the "Operations" column.
    $cells[] = $renderer->render($form[$key]['actions']);
    // Create the row.
    $rows[] = ['data' => $cells, 'class' => $row_classes];
    // If the current entity array specifies a form, output it in the next row.
    if (!empty($form[$key]['form'])) {
      $row = [
        ['data' => $renderer->render($form[$key]['form']), 'colspan' => count($fields) + 1],
      ];
      $rows[] = [
        'data' => $row,
        'class' => ['ief-row-form'],
        'no_striping' => TRUE,
      ];
    }
  }

  if (!empty($rows)) {
    $tabledrag = [];
    if ($has_tabledrag) {
      $tabledrag = [
        [
          'action' => 'order',
          'relationship' => 'sibling',
          'group' => 'ief-entity-delta',
        ],
      ];
    }

    $table = [
      '#type' => 'table',
      '#header' => $header,
      '#rows' => $rows,
      '#attributes' => [
        'id' => 'ief-entity-table-' . $form['#id'],
        'class' => ['ief-entity-table'],
      ],
      '#tabledrag' => $tabledrag,
    ];

    // return $renderer->render($table); // -
    $variables['table'] = $table; // +
  }
}

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

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