Criando um custom Views Field no Drupal 8

 Sabe aquele campo Global da View? Pois bem. Hoje vamos aprender como criar o nosso próprio campo global.

No exemplo abaixo, o módulo irá se chamar "custom_plugin_views_field". Crie o arquivo "custom_plugin_views_field.info.yml" com o seguinte conteúdo:

name: Custom Plugin Views Field
type: module
description: Provides a custom field to use in Views (Similar to global fields), created via Plugin
core: 8.x
package: Custom


O próximo passo é implementar o "hook_views_data".
Crie o arquivo "custom_plugin_views_field.views.inc" com o seguinte conteúdo: 

<?php
/**
 * @file
 * Provide views data for our custom module_name.
 */
/**
 * Implements hook_views_data().
 */
function custom_plugin_views_field_views_data() {
  $data['views']['custom_views_field'] = array(
    'title' => t('Custom Views Field'),
    'help' => t('Custom field help.'),
    'field' => array(
      'id' => 'custom_views_field',
    ),
  );

  return $data;
}

Aqui você define o nome de máquina do seu campo, título, grupo, etc.

Agora, vamos implementar o plugin responsável pela exibição do conteúdo desse campo.

Dentro do seu módulo, crie a seguinte estrutura de pastas: src/Plugin/views/field/

E dentro da pasta "field", crie o arquivo "CustomViewsField.php" com o seguinte conteúdo:

<?php

namespace Drupal\custom_plugin_views_field\Plugin\views\field;

use Drupal\Core\Form\FormStateInterface;
use Drupal\views\Plugin\views\field\FieldPluginBase;
use Drupal\views\ResultRow;

/**
 * Field handler to show a custom_views_field of the current row.
 *
 * @ingroup views_field_handlers
 *
 * @ViewsField("custom_views_field")
 */
class CustomViewsField extends FieldPluginBase {

  /**
   * {@inheritdoc}
   */
  public function usesGroupBy() {
    return FALSE;
  }

  /**
   * {@inheritdoc}
   */
  protected function defineOptions() {
    $options = parent::defineOptions();
    return $options;
  }

  /**
   * {@inheritdoc}
   */
  public function buildOptionsForm(&$form, FormStateInterface $form_state) {
    parent::buildOptionsForm($form, $form_state);
  }

  /**
   * {@inheritdoc}
   */
  public function query() {
    // do nothing -- to override the parent query.
  }

  /**
   * {@inheritdoc}
   */
  public function getValue(ResultRow $values, $field = NULL) {
  
    //Making something here!

    //$nid = $values->_entity->get('nid')->value;
    //$type = $values->_entity->get('type')->__get('target_id');

    $result = 'Show something!';

    return $result;
  }

}


Pronto! Habilite seu módulo e vamos testar.
Crie uma "View". Ao adicionar um campo, veja se o seu campo "Custom Views Field" está disponível.





Feito! Agora você tem uma campo personalizado, do qual tem total liberdade para definir o que será exibido em seu conteúdo.

Vou deixar aqui o download do módulo para facilitar.

Espero ter ajudado. 
Até o próximo tutorial!

Login do usuário