Message d'avertissement

The subscription service is currently unavailable. Please try again later.

Masquer une views si vide dans menu

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour, j'ai beau chercher sur les forums, je ne trouve pas comment masquer une vue si elle est vide. En fait je veux plus précisément que l'entrée dans le menu soit masquer si elle renvoie un résultat nul ou vide?

Je pensais pouvoir le faire avec les arguments mais, pfff? je comprends pas bien comment ça marche....

Le site concerné en cours de développement est http://cleraffaires83.com/

le but est que si aucun partenaire n'est créer dans la catégorie ALCOOL par exemple, je veux que ALCOOL disparaisse dans le menu "PARTENAIRES"

Merci d'avance pour votre aide....

Version de Drupal : 

Salut,

C'est une question intéressante. Une p'tite recherche sur le net a donné une solution que je reproduis ci-dessous.

Note que cette solution ne fonctionnera que pour modifier le menu "Liens primaires", mais tu devrais pouvoir adapter le principe pour un autre menu.

Il faut implémenter la fonction preprocess_page() soit dans ton thème (en créant une fonction THEMENAME_preprocess_page(&$vars)), soit dans un module maison (en créant une fonction MODULENAME_preprocess_page(&$vars)).

La fonction preprocess_page() te permet d'intercepter et de modifier toutes les variables passées au template page.tpl.php. En l'occurrence, tu veux modifier la variable $primary_links car c'est elle qui contient les liens primaires.

Le code à mettre dans ta fonction preprocess_page() ressemblera à :

<?php
// Remplace 'view_name' par le nom de ta vue.
$view = views_get_view('view_name');
// Remplace 'default' par l'affichage à utiliser dans la vue
// (si tu veux un autre affichage que celui par défaut)
// Les arguments (args) sont optionnels.
$output = $view->preview('default', $args);
if (empty(
$view->result)) {
  
// Ici, tu sais que ta vue est vide, il faut donc
   // supprimer l'élément de menu pointant vers ta vue.
   // J'ai mis du pseudo-code, il te faudra probablement
   // parcourir la variable $vars['primary_links'] pour trouver
   // le lien pointant vers ta vue
  
unset($vars['primary_links']['toto']);
}
?>

Super, merci pour le bout de code.
La seule chose, c'est que j'ai beaucoup de catégorie... Soit il faut que je trouve une requête qui permet de faire ça en automatique sans que j'ai à modifier le php à chaque fois que je rajoute une catégorie, soit je forme mes clients à apprendre à activer ou désactiver les entrées des menus...

Par les views.... Je crée un champs CCK type field_text en liste ordonnée, je crée ensuite toute un ensemble de valeurs autorisées (alccol, auto, ...).

Ensuite, dans views, je crée une page avec en "TRI", catégorie:type ALCOOL par exemple puis je crée une entrée dans le menu avec la view....

OK, autrement dit, tu fais une vue qui pointe vers d'autres vues. Et tu veux faire disparaître les liens qui pointent vers des vues vides.

Pour ce besoin, ça aurait ptêtre été plus simple de faire un bout de code toi-même, avec tes propres requêtes SQL.

Certes, mais je suis autodidacte... et je ne maitrise vraiment pas bien le PHP. Je ne saurais même pas comment m'y prendre...

En attendant, la cliente désactivera les entrées de Menu par l'administration de DRUPAL. Malgré tout, je pensais qu'on pouvais configurer les views pour faire ça mais apparemment, non....

Il faudrait en faite rajouter dans le module views une case à cocher dans la fenêtre de création d'entrée de Menu permettant d'indiquer de désactiver l'entrée de menu si vide...

On a dans DRUPAL la fonction d'activation ou non dans "Menu" et on sait faire une requête de test (si vue= aucun résultat. Je pense que c'est de ce côté qu'il faut chercher, mais mes connaissances en PHP sont trop limité pour me lancer dans l'aventure..

Mais je suis sûr que ça pourrais être utile pour la communauté...

En tout cas, merci encore de vous intéresser à mon soucis.