J'ai plusieurs types de nœuds, chacun référencé dans un vocabulaire de termes de taxonomie différent. Pour la catégorie montrant j'utilise le module taxonomy_display.
Par exemple, nous avons deux catégories: les queues de billard et les boules de billard.
Cues a des prix de, des prix et des filtres de type bois. Mais les boules n'ont pas de filtre à bois.
Je dois donc supprimer le filtre de type de bois si taxonomy_term tid fait référence au vocabulaire des boules de billard.
Par conséquent, je dois supprimer l'un des nombreux filtres exposés par programme.
function modulename_views_pre_view(&$view, &$display_id, &$args) {
// Some custom logic wich field_info_instances checking ...
$filter_field = 'filter_id';
// Removes from everywhere where i can find filter or filters properties
unset($view->display[$view->current_display]->display_options['filters'][$filter_field]);
unset($view->display[$view->current_display]->handler->options['filters'][$filter_field]);
unset($view->display_handler->display->display_options['filters'][$filter_field]);
unset($view->display_handler->options['filters'][$filter_field]);
}
Le champ de filtre se retire avec succès, mais j'ai un avis php:
Notice: Undefined index: field_wood_reference_tid in function views_handler_filter_term_node_tid->exposed_validate()
J'essaie également de supprimer le champ dans hook_pre_execute (), mais avec le même résultat:
function modulename_views_pre_execute(&$view) {
$filter_field = 'filter_id';
unset($view->display_handler->handlers['filter'][$filter_field]);
unset($view->filter[$filter_field]);
}
Essayez également avec la méthode override_option () comme ici - http://groups.drupal.org/node/82219 , mais aucun résultat du tout.
Aucune suggestion? Aide Pls =)
Merci à tous pour la réponse mais je n'ai toujours pas de réponse. Peut-être que quelque chose n'est pas clair? = (
?filter_id=val
, vues renvoie un affichage vide ou une erreur de choix illégal ...Réponses:
J'utiliserais hook_form_alter en utilisant unset sur l'objet formulaire comme vous l'êtes dans votre exemple pour l'élément que vous souhaitez supprimer.
la source
Voici l'extrait testé qui vous permettra de supprimer les filtres des vues exposées du formulaire à l'aide de la modification de formulaire mentionnée par Scott Thomas,
En plus de supprimer le champ du formulaire, vous devez également supprimer les informations pour un filtre particulier qui est disponible dans $ form ['# info'], afin qu'il supprime également l'étiquette. Si vous supprimez l'élément de formulaire seul, le libellé du filtre s'affichera même si le champ est supprimé. Veillez donc toujours à supprimer également ces informations.
Modifiez cela selon vos besoins. Si vous souhaitez effectuer celui-ci pour une vue particulière, ajoutez une condition pour cela aussi,
Ici $ form_state ['view'] vous donnera l'objet de vue actuel qui est en cours de traitement.
J'espère que cela t'aides.
la source
Suivez les étapes ci-dessous
Ensuite, essayez le morceau de code suivant
unset ($ form ['# info'] ['your_field_name']); $ form ['your_field_name'] ['# access'] = 'FALSE';
J'espère que cela pourra aider.
la source
Vous pouvez également supprimer le filtre exposé à l'aide du fichier modèle.
Utilisez cette commande:
Dans le fichier modèle, trouvez ce code:
Et retirez-le. Votre filtre exposé sera supprimé de l'affichage, mais continuera de fonctionner si vous passez les arguments appropriés dans l'URL.
la source
Corrigez-moi si je me trompe car je ne suis pas sûr de bien comprendre votre problème. Vous souhaitez donc masquer un filtre exposé dans une vue en fonction de la valeur d'un autre filtre exposé? Si c'est le cas, vous pouvez essayer le module Filtres dépendants des vues . Je l'ai utilisé plusieurs fois et ça fait l'affaire.
Vous pouvez consulter notre fiend Lullabot examen sur ce module.
Si vous avez vraiment besoin de le faire dans le code, l'option exposée devrait fonctionner: filter [$ filter_id] -> options ['expose'] = FALSE;
la source
$view->display_handler->handlers['filter'][$filter_field]->options['exposed'] = FALSE;
j'ai une erreur fatale -PHP Fatal error: Call to undefined method stdClass::access() in .../view.inc on line 766
. Je pense que son comportement correct parce que si le filtre n'est pas exposé, il a également besoin d'une valeur par défaut. Des idées?Ce qui suit l'a fait pour moi dans hook_form_alter:
la source
Méthode 1
En utilisant hook_views_query_alter (). Voir l'exemple suivant:
Méthode 2
Voir l'exemple en utilisant hook_views_pre_execute et une fonction personnalisée qui essaie de trouver la bonne condition de champ et de lui renvoyer la référence:
la source
Je le supprime des fichiers de modèle. Substituez le views-view.tpl.php et supprimez-en le code suivant:
la source
Je pense que l'op était sur la bonne voie. J'ai eu une situation similaire sans filtres exposés, donc je ne pouvais pas utiliser la méthode hook_form_alter. Voici un exemple de code pour toute autre personne rencontrant ceci:
L'objet de vue n'a pas de
remove_item
fonction mais indique simplement dans le code que vous pouvez le définir sur null afin de supprimer un élément incluant les filtres:views/includes/view.inc
en ligne2526
.Voici un exemple complet pour quiconque cible une vue et un affichage spécifiques:
la source