Категория:
Опубликовано:

Добавляем псевдо-поле в форму

Drupal - Псевдо поле

Система полей в Drupal - шикарна, и бесспорно является одной из его визитных карточек.

Поля есть, буквально, для всего что может понадобится. Ну, а если и нет - то всегда можно сделать ;)

Но, все же, есть случаи, когда поле как бы и нужно, но полем оно быть не должно (например - для вывода какой-либо информации). И для этих случаев есть экстра-поля, которые также называют псевдо-полями.

Рассмотрим как добавить псевдо-поле в форму юзера Drupal 8.

Все, в принципе, по аналогии с 7кой...

Берем hook_entity_extra_field_info, и в нем описываем всю магию:

/**
 * Implements hook_entity_extra_field_info().
 */
function MYMODULE_entity_extra_field_info()
{
    $extra = [];
 
    /** @var \Drupal\user\UserInterface $bundle */
    foreach (\Drupal\user\Entity\User::loadMultiple() as $bundle) {
        $extra['user']['user']['form']['pseudo_field_name'] = [
            'label' => t('Field name'),
            'description' => t('Field description'),
            'weight' => 0,
            'visible' => TRUE,
        ];
    }
 
    return $extra;
}

Далее, альтерим форму:

/**
 * Implements hook_form_alter().
 * @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException
 */
function MYMODULE_form_user_form_alter(&$form, FormStateInterface $form_state, $form_id)
{
    $weight = $fd = \Drupal::entityTypeManager()
        ->getStorage('entity_form_display')
        ->load('user.user.default'); // Получаем конфиг юзера
 
    $user = $form_state->getFormObject();
    $form['pseudo_field_name'] = [
        // Получаем вес поля из конфига юзера
        '#weight' => $weight->get('content')['pseudo_field_name']['weight'],
        'content' => MyClassForPseodoFieldView::viewMethod($user),
    ];
}

Все.

ЗЫ - Если бы ноде поле цепляли, и отображали бы во вью моде - нужно было бы выводить в hook_ENTITY_TYPE_view

Ссылки по теме:

Теги: 
Если у Вас возникли вопросы, замечания, предложения или просто благодарность - пишите в комментариях.
Делитесь полезными материалами в социальных сетях.
Добавить комментарий