Découpler tous les filtres exposés dans Drupal avec l'autre et faire de chaque filtre exposé comme un bloc séparé

StackOverflow https://stackoverflow.com/questions/3602063

Question

J'ai créé un type de contenu personnalisé et en utilisant views2 pour créer différentes pages vues. J'utilise une taxonomie (ayant 4 termes, dis "A" , "B" , "C" et "D" ) pour la catégorisation plus large de ce type de contenu. Il y a 4 autres taxonomies correspondant à chacune des conditions ci-dessus "A" , "B" , "C" et «D " appelé " Taxonomie-A ", " Taxonomie-B ", " Taxonomie-C " et " Taxonomie -D " qui sont utilisés pour d'autres sous-catégoriser ce type de contenu dans une catégorie particulière (par exemple " a " ou " B ", etc.). La sous-catégorie "Taxonomie-A" est visible sur le formulaire de modification de noeud que si la catégorie plus large "A" est sélectionné. Similaire est le cas avec "B" , "C" catégories et "D" . Maintenant, dans mes pages vues, j'ai utilisé des termes de taxonomie "A" , "B" , "C" et "D « comme mes premiers arguments de l'URL. Ainsi l'adresse suivante

www.example.com/A

fournit de « catégorie A » tous les types de contenu personnalisé publiés. Similaires seront les cas pour « catégorie B », « catégorie C », etc. Maintenant, pour filtrer mes types de contenu d'une catégorie particulière (disons « A ») dans ses sous-catégories, j'ai créé quatre filtres exposés correspondant à chaque taxonomie « Taxonomie-A », « Taxonomie-B », « Taxonomie-C » et "Taxonomie-D". Maintenant, je voudrais montrer un seul filtre sur chaque type de page « vue »;. I.e.
Filtre correspondant à "Taxonomie-A" www.example.com/A vue
Filtre correspondant à "Taxonomie-B" www.example.com/B vue
Filtre correspondant à "Taxonomie-C" www.example.com/C vue etc.

Si je configure le réglage de base de vue pour afficher le filtre dans un bloc séparé, le bloc de filtre contient tous les filtres Quatre plus bouton Appliquer. Mais je veux montrer un seul filtre (basé sur le premier argument de la page URL) avec bouton Appliquer.

En fait, je voudrais découpler tous les filtres exposés les uns avec les autres et faire de chaque filtre exposé comme un bloc séparé qui peut être attribué à une région modèle. Est-il possible d'y parvenir en thématisation (chaque élément de sélection sur les vues exposées sous forme de filtre a différent « id »)? Sinon, la seule option qui reste avec moi est de créer des types de contenu distinctes pour chaque catégorie "A" , "B" "C" , et < strong> "D" , ce qui est une solution pratique si le nombre de catégories sont grandes.

Comment je peux y parvenir?

Merci d'avance pour votre réponse !!

Était-ce utile?

La solution

1. Super Slick

Eh bien, la façon lisse serait de voir comment vous pouvez modifier des vues pour cracher les différents filtres exposés dans différents blocs, éventuellement déterminés par un paramètre delta bloc dans la configuration pour chaque filtre. Ce serait bien.

2. Overkill / redondante / REATB-hook_block () Drill

Obtenez votre bloc exposé, puis utilisez hook_form_alter() pour cacher les filtres que vous souhaitez mettre sur un autre bloc. Ensuite, créer de nouveaux blocs dans un programme nouveau module (ou si vous devez absolument, le module de filtre PHP et un bloc personnalisé à travers l'interface graphique). Dans ce module, reproduire les éléments de formulaire dont vous avez besoin dans ce bloc, y compris le filtre exposé unique. Il est utile de se rappeler que les filtres exposés ne se soucient pas de la forme. Ils se soucient de la querystring. Vous pouvez taper dans vos arguments de filtre dans l'URL si nécessaire.

3. Modification conditionnelle

Mettre en œuvre hook_form_alter () pour la forme affichée dans le filtre exposée. Pour identifier ce formulaire, vous devez d'abord obtenir l'ID du views_exposed_form (pas sûr qu'il est que) alors obtenir un identifier plus spécifique sur le tableau de formulaires pour cibler uniquement cette forme exposée. (Vous auriez besoin pour cette approche # 2 de toute façon).

Maintenant que vous avez, vous pouvez faire une ou deux choses. Tout d'abord, gardez à l'esprit que si vous êtes agressif cache ce bloc d'une manière Gobal, cela va briser. Cache par page, ou à quelque granularité vous avez l'intention de changer le bloc. Pour chaque filtre que vous voulez cacher, vous allez mettre une certaine logique dans $form['#access'] si Drupal peut regarder l'élément de forme, regardez la page, il est sur, et cacher cet élément de forme parce que ce n'est pas utilisé.

Si vous arrivé à appuyer sur le chemin de la page en cours, vous pouvez faire quelque chose comme ceci:

$form['taxonomy_b_filter']['#access'] = arg(0) == 'section';

Ceci indique Drupal pour cacher l'élément 'taxonomy_b_filter' imaginaire si le chemin de la page actuelle ressemble http: // example.com/section .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top