--- /dev/null
+{% extends "base/class.php.twig" %}
+
+{% block file_path %}
+\Drupal\{{module}}\Plugin\views\field\{{class_name}}.
+{% endblock %}
+
+{% block namespace_class %}
+namespace Drupal\{{module}}\Plugin\views\field;
+{% endblock %}
+
+{% block use_class %}
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\Component\Utility\Random;
+use Drupal\views\Plugin\views\field\FieldPluginBase;
+use Drupal\views\ResultRow;
+{% endblock %}
+
+{% block class_declaration %}
+/**
+ * A handler to provide a field that is completely custom by the administrator.
+ *
+ * @ingroup views_field_handlers
+ *
+ * @ViewsField("{{ class_machine_name }}")
+ */
+class {{ class_name }} extends FieldPluginBase {% endblock %}
+{% block class_methods %}
+ /**
+ * {@inheritdoc}
+ */
+ public function usesGroupBy() {
+ return FALSE;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function query() {
+ // Do nothing -- to override the parent query.
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function defineOptions() {
+ $options = parent::defineOptions();
+
+ $options['hide_alter_empty'] = ['default' => FALSE];
+ return $options;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function buildOptionsForm(&$form, FormStateInterface $form_state) {
+ parent::buildOptionsForm($form, $form_state);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function render(ResultRow $values) {
+ // Return a random text, here you can include your custom logic.
+ // Include any namespace required to call the method required to generate
+ // the desired output.
+ $random = new Random();
+ return $random->name();
+ }
+{% endblock %}