web-dev-qa-db-fra.com

Comment masquer un bloc de filtre exposé si les résultats de la vue sont vides?

J'ai un bloc de filtre exposé dans la barre latérale de ma page. Je souhaite masquer le bloc de filtre exposé si le résultat de la vue est vide. Quel était le mieux était de le faire? En ce moment, j'ai du code Jquery dans un champ de texte sans comportement qui cache certains éléments de bloc. Mais je n'aime pas cette solution. Je préfère que le code soit propre et que le code html soit complètement supprimé.

5
oll

La réponse de @ pierre est bonne, mais $ view-> total_rows n'est pas toujours renseignée.

Vous pouvez donc faire quelque chose comme ça à la place, qui fonctionnera quoi qu'il arrive:

function MODULE_views_pre_render(&$view) {
  if ($view->name == 'VIEW_NAME' && $view->current_display == 'DISPLAY_NAME') {
    if (empty($view->result) && empty($view->getExposedInput())) {
      $view->exposed_widgets = NULL;
    }
  }
}
8
elstudio

Les suggestions ci-dessus pour [fonction MODULE_form_views_exposed_form_alter (& $ form, & $ form_state)] sont utiles si vous souhaitez masquer les filtres exposés, que les résultats s'affichent ou non.

Donc, selon vos besoins, vous pouvez masquer les filtres quand aucun résultat ne sera trouvé en utilisant le code ci-dessous:

function hook_views_pre_render(&$view){
  if($view->name == VIEW_NAME){
    if(empty($view->result) && isset($view->exposed_widgets)){
        $view->exposed_widgets = FALSE;
      }
   }
}
1
Juyal Jee

Dans un module personnalisé, implémente hook_form_FORM_ID_alter() pour le views_exposed_form forme. Commencez par vérifier si le formulaire est celui de votre vue et de votre affichage, puis définissez son #access propriété FALSE si les vues n'ont aucun résultat.

function MODULE_form_views_exposed_form_alter (&$form, &$form_state) {
  $view = &$form_state['view'];
  if ($view->name == VIEW_NAME && $view->current_display == DISPLAY_NAME) {
    if (empty($view->total_rows)) {
      $form['#access'] = FALSE;
    }
  }
}
1
Pierre Buyle