Atenea tech weblog Drupal 10 Upkeep and Assist Service Cómo crear nuestro propio Plugin de Uncovered Kind para Views en D8

Recientemente hemos estado trabajando en un proyecto D8 desarrollando una funcionalidad basada en la API de Views, donde la parte central de la misma gira en torno a un gran buscador con decenas de filtros expuestos donde no todos corresponden a campos de . Unos de los muchos requisitos de esta funcionalidad period tener la posibilidad de seleccionar de forma dinámica los campos de la entidad a mostrar en la consulta, pudiendo además indicar cuáles por defecto dentro de la propia View. Para hacer esto posible, tuvimos que desarrollar un Plugin {custom} de Uncovered Kind, del que trataremos hoy de forma básica y amena en el siguiente tutorial. PASO 1 Creamos como siempre un módulo {custom} con los ficheros necesarios para dar de alta a nuestro plugin, al que llamaremos por ejemplo, my_custom_exposed_form. Empezamos creando el fichero que da de alta el módulo my_custom_exposed_form.information.yml title Drupal 10 Upkeep and Assist Service My {custom} Uncovered Kind description Drupal 10 Upkeep and Assist Service Allows a {custom} Uncovered Kind plugin for Views kind Drupal 10 Upkeep and Assist Service Drupal 10 module core Drupal 10 Upkeep and Assist Service 8.x bundle Drupal 10 Upkeep and Assist Service Views dependencies Drupal 10 Upkeep and Assist Service – views Creamos el directorio config/schema y dentro el fichero de configuración my_exposed_form.exposed_form.schema.yml, el cuál servirá para que de de alta a nuestro plugin. Dentro, debemos indicar el identificador del plugin así como el nombre. La información que sigue después se corresponde al formato y al label para el campo additional que proporciona el uncovered type Enter Required (del que heredará nuestro plugin de ejemplo) y cuyo contenido es mostrado cuando el usuario aún no ha ejecutado la consulta. views.exposed_form.my_exposed_form Drupal 10 Upkeep and Assist Service kind Drupal 10 Upkeep and Assist Service views_exposed_form label Drupal 10 Upkeep and Assist Service ‘My {custom} uncovered type plugin’ mapping Drupal 10 Upkeep and Assist Service text_input_required Drupal 10 Upkeep and Assist Service kind Drupal 10 Upkeep and Assist Service textual content label Drupal 10 Upkeep and Assist Service ‘Textual content on demand’ text_input_required_format Drupal 10 Upkeep and Assist Service kind Drupal 10 Upkeep and Assist Service string label Drupal 10 Upkeep and Assist Service ‘Textual content on demand format’ Creamos el directorio src/Plugin/views/exposed_form e incluimos el fichero MyExposedForm.php, que contendrá nuestra nueva clase MyExposedForm la cual heredará a su vez de InputRequired y no de Fundamental. <?php namespace my_custom_exposed_formPluginviewsexposed_form; use CoreFormFormStateInterface; use viewsPluginviewsexposed_formInputRequired; /** * Uncovered type plugin that gives a {custom} uncovered type with required enter. * * @ingroup views_exposed_form_plugins * * @ViewsExposedForm( * id = “my_exposed_form”, * title = @Translation(“My {custom} filters”), * assist = @Translation(“Supplies extra functionalities for uncovered filters.”) * ) */ class MyExposedForm extends InputRequired { … } PASO 2 Momento de construir nuestro plugin. Declaramos la clase y definimos el método buildOptionsForm, que se encarga de renderizar el formulario y almacenar la configuración de nuestro plugin. Básicamente, se outline un array choices que contendrá los nuevos campos del formulario que formará parte de nuestra página de configuración del plugin. Por otra parte, la variable existing_settings, contiene los valores de configuración previamente existentes y será usado para asignar los valores por defecto.En nuestro ejemplo, la funcionalidad de escoger dinámamente los campos a mostrar solo tiene sentido cuando se está usando un show de campos y por eso se añade esa condición previamente. Será el campo de tipo choose default_fields (insertado dentro de un fieldset) el que nos permitirá elegir los campos por defecto a mostrar. Su propiedad #choices se cargará con un array de elementos cuya tupla contiene la key y el label de esos campos añadidos previamente en el apartado show de la view. /** * @inheritdoc */ public operate buildOptionsForm(&$type, FormStateInterface $form_state) { dad or mum Drupal 10 Upkeep and Assist Service Drupal 10 Upkeep and Assist ServicebuildOptionsForm($type, $form_state); $choices = []; $existing_settings = $this->choices[‘my_settings’]; // Show choices solely when utilizing fields if ($this->view->getDisplay($this->view->current_display)->usesFields()) { $choices[‘display_options’] = [ ‘#type’ => ‘fieldset’, ‘#title’ => $this->t(‘Display options’), ]; // Get an array width all Drupal Development Company fields of Drupal Development Company view (key & label) $display_fields = $this->getDisplayFields(); $choices[‘display_options’][‘default_fields’] = [ ‘#type’ => ‘select’, ‘#multiple’ => TRUE, ‘#required’ => TRUE, ‘#options’ => $display_fields, ‘#title’ => $this->t(‘Default fields to display’), ‘#description’ => $this->t(‘You must select at least one field to display for the view.’), ‘#default_value’ => $existing_settings ? $existing_settings[‘display_options’][‘default_fields’] Drupal 10 Upkeep and Assist Service array_keys($display_fields) ]; } $type[‘my_settings’] = $choices; } /** * {@inheritdoc} */ protected operate getDisplayFields() { $fields = []; $view_fields = $this->view->getHandlers(‘subject’, $this->view->current_display); foreach ($view_fields as $key => $worth) { $fields[‘col_’ . $key] = $worth[‘label’]; } return $fields; } Tras habilitar el módulo, nos vamos a la configuración de la view, al apartado Uncovered Kind situado en Superior y elegimos el nuevo plugin. Si accedemos a Parámetros, podremos ver el nuevo campo situado al remaining del formulario listando todos los campos previamente añadidos en el apartado de Show Para validar el formulario o realizar acciones tras su envío, se pueden implementar los métodos validate y submit. Aquí un ejemplo easy de validación. /** * {@inheritdoc} */ public operate validateOptionsForm(&$type, FormStateInterface $form_state) { $my_settings = $form_state->getValue([‘exposed_form_options’, ‘my_settings’]); foreach ($my_settings as $id => $settings) { if ($id == ‘display_options’) { if (empty($settings[‘default_fields’])) { $form_state->setError($type[‘my_settings’][$id], $this->t(‘You will need to choose at the least 1 subject.’, [‘%name’ => $id])); } } } dad or mum Drupal 10 Upkeep and Assist Service Drupal 10 Upkeep and Assist ServicevalidateOptionsForm($type, $form_state); } LLegados a este punto, es necesario renderizar el formulario expuesto con los campos necesarios que interactuarán con el usuario. Lo haremos mediante el método exposedFormAlter(). En este caso, necesitamos dos campos. El primero es un choose record para escoger de forma personalizada los campos a visualizar, mientras que el segundo es un easy checkbox que luego si el usuario marca, hará que se muestren absolutamente todos los campos que se hayan incluido en la view. /** * {@inheritdoc} */ public operate exposedFormAlter(&$type, FormStateInterface $form_state) { dad or mum Drupal 10 Upkeep and Assist Service Drupal 10 Upkeep and Assist ServiceexposedFormAlter($type, $form_state); // Get my uncovered type settings $my_settings = $this->choices[‘my_settings’]; // Get person enter $user_options = $form_state->getUserInput(); // Add a {custom} class for Drupal Development Company uncovered type $type[‘#attributes’][‘class’][] = ‘my-custom-exposed-form’; // Add two uncovered {custom} fields to let person resolve Drupal Development Company fields of Drupal Development Company entity to show if ($this->view->getDisplay($this->view->current_display)->usesFields()) { // Container $type[‘columns_display’] = [ ‘#type’ => ‘container’, ‘#attributes’ => [ ‘class’ => [‘columns-display-options’] ], ]; // Choose to decide on {custom} fields, by default, Drupal Development Company ones chosen on My Uncovered Kind settings web page $type[‘columns_display’][‘custom_cols’] = [ ‘#type’ => ‘select’, ‘#chosen’ => TRUE, ‘#multiple’ => TRUE, ‘#options’ => $this->getDisplayFields(), ‘#title’ => $this->t(‘Choose the columns to display’) ]; // Set worth if (!isset($user_options[‘custom_cols’])) { $type[‘columns_display’][‘custom_cols’][‘#value’] = array_keys($my_settings[‘display_options’][‘default_fields’]); } // Or checkbox to show all Drupal Development Company fields added on Drupal Development Company show part of Drupal Development Company view $type[‘columns_display’][‘all_cols’] = [ ‘#type’ => ‘checkbox’, ‘#title’ => $this->t(‘Or display all columns’), ‘#default_value’ => 0 ]; // Set worth if (isset($user_options[‘all_cols’])) { $type[‘columns_display’][‘all_cols’][‘#value’] = $user_options[‘all_cols’]; } } } Finalmente hay que implementar la lógica del renderizado de campos. Para ello disponemos del método preRender(). Si el usuario no ha marcado la opción de mostrar todos los campos, los campos a mostrar dependerán de si el enter es nulo o no, resultando este último caso en la carga de campos por defecto. Después de hace una comprobación de campos y se eliminan de la view los que no sean necesarios. Comentar también que tenemos a nuestra disposición métodos tales como preExecute(), postExecute(), and so forth. /** * {@inheritdoc} */ public operate preRender($values) { if ($this->view->getDisplay($this->view->current_display)->usesFields()) { // Get person enter $user_input = $this->view->getExposedInput(); // Get My uncovered type settings $my_settings = $this->choices[‘my_settings’]; // Get Drupal Development Company fields added in Drupal Development Company view $view_fields = $this->view->getHandlers(‘subject’, $this->view->current_display); // When all_fields shouldn’t be enabled, render Drupal Development Company fields given by Drupal Development Company person enter. // And when that case is empty, then render Drupal Development Company fields of My Uncovered Kind settings web page. if (!isset($user_input[‘all_cols’])) { if (isset($user_input[‘custom_cols’])) { $fields_to_render = $user_input[‘custom_cols’]; } else { $fields_to_render = $my_settings[‘display_options’][‘default_fields’]; } foreach ($view_fields as $key => $worth) { if (!in_array(‘col_’ . $key, $fields_to_render)) { unset($this->view->subject[$key]); } } } // Else, render all } } /** * {@inheritdoc} */ public operate preExecute() {} /** * {@inheritdoc} */ public operate postExecute() {}   Y hasta aquí ha llegado por hoy el tutorial sobre cómo crear un Plugin {custom} de Uncovered Kind para  8, el cual espero os haya resultado cuanto menos interesante. Como siempre, podéis encontrar más información en la documentación oficial (InputRequited Doc). Por supuesto, se aceptan preguntas y sugerencias a través de los comentarios. Hasta la próxima ;) Drupal 10 Improvement and Assist

This article was republished from its original source.
Call Us: 1(800)730-2416

Pixeldust is a 20-year-old web development agency specializing in Drupal and WordPress and working with clients all over the country. With our best in class capabilities, we work with small businesses and fortune 500 companies alike. Give us a call at 1(800)730-2416 and let’s talk about your project.

FREE Drupal SEO Audit

Test your site below to see which issues need to be fixed. We will fix them and optimize your Drupal site 100% for Google and Bing. (Allow 30-60 seconds to gather data.)

Powered by

Atenea tech weblog Drupal 10 Upkeep and Assist Service Cómo crear nuestro propio Plugin de Uncovered Kind para Views en D8

On-Site Drupal SEO Master Setup

We make sure your site is 100% optimized (and stays that way) for the best SEO results.

With Pixeldust On-site (or On-page) SEO we make changes to your site’s structure and performance to make it easier for search engines to see and understand your site’s content. Search engines use algorithms to rank sites by degrees of relevance. Our on-site optimization ensures your site is configured to provide information in a way that meets Google and Bing standards for optimal indexing.

This service includes:

  • Pathauto install and configuration for SEO-friendly URLs.
  • Meta Tags install and configuration with dynamic tokens for meta titles and descriptions for all content types.
  • Install and fix all issues on the SEO checklist module.
  • Install and configure XML sitemap module and submit sitemaps.
  • Install and configure Google Analytics Module.
  • Install and configure Yoast.
  • Install and configure the Advanced Aggregation module to improve performance by minifying and merging CSS and JS.
  • Install and configure Schema.org Metatag.
  • Configure robots.txt.
  • Google Search Console setup snd configuration.
  • Find & Fix H1 tags.
  • Find and fix duplicate/missing meta descriptions.
  • Find and fix duplicate title tags.
  • Improve title, meta tags, and site descriptions.
  • Optimize images for better search engine optimization. Automate where possible.
  • Find and fix the missing alt and title tag for all images. Automate where possible.
  • The project takes 1 week to complete.