Saltar al contenido

Drupal: agregar autocompletar para el campo de texto

Hola usuario de nuestro sitio, encontramos la solución a lo que estabas buscando, deslízate y la verás más abajo.

Solución:

Si desea seleccionar una entidad, hay una manera mucho más fácil de hacerlo. Drupal 8 tiene un tipo de campo de entidad_autocompletado estándar, solo especifique su elemento de formulario de esta manera:

$form['node'] = [
  '#type' => 'entity_autocomplete',
  '#target_type' => 'node',
];

Consulte Campo de autocompletado personalizado para obtener más información.

Además, nunca realice consultas de bases de datos en tablas de nodos/entidades. Usa Drupal::entityQuery() para eso.

Su clase necesita alguna modificación, necesita verificar la solicitud y ponerla en $string.

query->get('q');
    if ($string) 
      $matches = array();
      $query = Drupal::entityQuery('node')
      ->condition('status', 1)
      ->condition('title', '%'.db_like($string).'%', 'LIKE');
      //->condition('field_tags.entity.name', 'node_access');
      $nids = $query->execute();
      $result = entity_load_multiple('node', $nids);
      foreach ($result as $row) 
        //$matches[$row->nid->value] = $row->title->value;
        $matches[] = ['value' => $row->nid->value, 'label' => $row->title->value];
      
    
    return new JsonResponse($matches);
  

  1. Cree un archivo routing.yml y agregue el siguiente código: admin_example.autocomplete:

:

  path: '/admin_example/autocomplete'
  defaults:
    _controller: 'Drupaladmin_exampleControllerAdminNotesController::autocomplete'
  requirements:
    _permission: 'access content'
  1. El formulario que ha creado en mymodule/src/Form/EditForm.php es correcto

Debe cambiar el código en el controlador. El código está a continuación:

public function autocomplete(Request $request)

 $string = $request->query->get('q');
    $matches = array();
      $query = db_select('node_field_data', 'n')
          ->fields('n', array('title', 'nid'))
          ->condition('title', $string . '%', 'LIKE')
          ->execute()
          ->fetchAll();
    foreach ($query as $row) 
        $matches[] = array('value' => $row->nid, 'label' => $row->title);
    

    return new JsonResponse($matches);

Te mostramos comentarios y calificaciones

Si conservas alguna suspicacia y capacidad de renovar nuestro ensayo eres capaz de ejecutar una reseña y con deseo lo leeremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : / /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *