Drupal 8 - Views - Récupérer un formulaire exposé

Posté le Vendredi 17 novembre 2017 - 11:18

Pour un besoin spécifique, il fallait que je récupère un formulaire exposé de views pour l'afficher ailleurs.

Il fallait en fait qu'à un endroit j'affiche les filtres exposés et à un autre le tri exposé.

J'ai donc créé un bloc, qui récupère ce formulaire, masque un champ.

Voici donc comment récupérer un formulaire exposé :

  1. $view_name = 'ma_vue';
  2. $view_display = 'page';
  3.  
  4. $view = \Drupal\views\Views::getView($view_name);
  5. $view->initHandlers();
  6. $view->setDisplay($view_display);
  7. $form_state = new \Drupal\Core\Form\FormState();
  8. $form_state->setFormState([
  9. 'view' => $view,
  10. 'display' => $view->display_handler->display,
  11. 'exposed_form_plugin' => $view->display_handler->getPlugin('exposed_form'),
  12. 'method' => 'get',
  13. 'rerender' => TRUE,
  14. 'no_redirect' => FALSE,
  15. 'always_process' => TRUE,
  16. ]);
  17.  
  18. // Ici j'ajoute une info pour connaitre le contexte si le formulaire est altéré
  19. // afin de distiguer cette instance de formulaire de la « normale ».
  20. $form_state->addBuildInfo('exposed_block', TRUE);
  21.  
  22. $form = \Drupal::formBuilder()->buildForm('Drupal\views\Form\ViewsExposedForm', $form_state);
  23.  
  24. // Je masque le champs qui ne m'intéresse pas
  25. $form['sort_by']['#access'] = FALSE;

Dans le cadre d'un HOOK_form_alter je peux récupérer l'information "exposed_block" de la façon suivante :

$form_state->getBuildInfo()['exposed_block']

 

 

 

Commentaires

opi

Posté le Vendredi 17 novembre 2017 - 19:07

Note que pour une vue avec un display 'page', et un formulaire exposé pas en mode bloc, j'ai du commenté la ligne $view->setDisplay($view_display); sinon je n'avais que les boutons submit.

De la à comprendre pourquoi... ;)

Merci pour le snippet

kgaut

Posté le Lundi 20 novembre 2017 - 08:29

aha oui, bon à savoir, mais pour la raison ¯\_(ツ)_/¯

Fontaine

Posté le Mardi 12 décembre 2017 - 10:42

Bonjour est il possible de supprimer le bouton submit pour que la recherche soit automatique

Posté le Mardi 12 décembre 2017 - 10:55

pour moi c'est indépendant du sujet de l'article ; Regarde du coté des paramètres AJAX et des paramètres du formulaire exposé, de souvenir c'est dans ce coin la (je ne fait jamais de recherche automatique, je trouve ca pas terrible niveau UX/a11y)

Posté le Mardi 12 décembre 2017 - 11:17

Merci pour la reponse j'ai verifie du cote des parametres Ajax et du formulaire mais j'ai tjrs pas trouve de solution

Ajouter un commentaire

Ne sera pas publié

HTML restreint

  • Balises HTML autorisées : <a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • Les adresses de pages web et les adresses courriel se transforment en liens automatiquement.
CAPTCHA
Désolé, pour ça, mais c'est le seul moyen pour éviter le spam...