Decuple todos los filtros expuestos en Drupal entre sí y haga que cada filtro expuesto sea un bloque separado

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

Pregunta

He creado un tipo de contenido personalizado y usando Views2 para crear varias vistas de página. He usado una taxonomía (con 4 términos, digamos "A", "B", "C" y "D") para una categorización más amplia de este tipo de contenido. Hay otras 4 taxonomías correspondientes a cada uno de los términos anteriores "A", "B", "C" y "D" llamó "Taxonomía a", "Taxonomía-B", "Taxonomía-C" y "Taxonomía-D" que se utilizan para subcategorizar aún más este tipo de contenido en una categoría particular (digamos "A" o "B" etc.). La subcategoría "Taxonomía a" es visible en el formulario de edición del nodo solo si la categoría más amplia "A" se selecciona. Similar es el caso con "B", "C" y "D" categorías. Ahora en mis vistas de página, he usado términos de taxonomía "A", "B", "C" y "D" Como mis primeros argumentos de la URL. Así la siguiente URL

www.example.com/a

Proporciona todos los tipos de contenido personalizado publicados de "Categoría A". Similarán los casos para "Categoría B", "Categoría C", etc. Ahora para filtrar mis tipos de contenido de una categoría particular (digamos "A") en sus subcategorías, he creado cuatro filtros expuestos correspondientes a cada taxonomía " Taxonomy-A "," Taxonomy-B "," Taxonomy-C "y" Taxonomy-D ". Ahora me gustaría mostrar solo un filtro en cada tipo de "visión de página"; es decir
Filtro correspondiente a "Taxonomy-A" en www.example.com/a vista de pagina
Filtro correspondiente a "Taxonomía-B" en www.example.com/b vista de pagina
Filtro correspondiente a "Taxonomía-C" en www.example.com/c Vista de página, etc.

Si configure la configuración básica de la vista para mostrar el filtro en un bloque separado, entonces el bloque de filtro contiene los cuatro botones Filter Plus Apply. Pero quiero mostrar solo un filtro (basado en el primer argumento de la URL de la página) con el botón Aplicar.

En realidad, me gustaría desacoplar todos los filtros expuestos entre sí y hacer cada filtro expuesto como un bloque separado que puede asignarse a una región de plantilla.¿Es posible lograr esto mediante el tema (cada elemento seleccionado en las vistas de la forma del filtro expuesto tiene "ID" diferente)? De lo contrario, la única opción que me queda a mi parte es crear tipos de contenido separados para cada categoría. "A", "B", "C" y "D", que no es una solución práctica si el número de categorías es grande.

¿Cómo puedo lograr esto?

¡¡Gracias por adelantado por tu respuesta!!

¿Fue útil?

Solución

1. Super Slick

Bueno, la forma hábil sería ver cómo podría modificar las vistas para escupir los diferentes filtros expuestos en diferentes bloques, posiblemente determinados por una configuración delta del bloque en la configuración para cada filtro. Eso estaría bien.

2. Excelente/redundante/fapi-hook_block () taladro

Obtenga su bloque expuesto, luego use hook_form_alter() Para ocultar los filtros que desea poner en un bloque diferente. Luego cree nuevos bloques mediante programación en un nuevo módulo (o si es absolutamente necesario, el módulo de filtro PHP y un bloque personalizado a través de la GUI). En ese módulo, replique los elementos de formulario que necesita en ese bloque, incluido el filtro expuesto único. Es útil recordar que los filtros expuestos no les importa el formulario. Les importa la consulta. Puede escribir sus argumentos de filtro en la URL si es necesario.

3. Modificación condicional

Implementar Hook_Form_alter () para el formulario que se muestra en el filtro expuesto. Para identificar este formulario, primero deberá obtener la identificación para el views_exposed_form (No estoy seguro de que) sea eso) Luego obtenga una identificación más específica de la matriz de formularios para apuntar solo a esta forma expuesta. (Necesitarías esto para el enfoque #2 de todos modos).

Ahora que tienes eso, puedes hacer un par de cosas. Primero, tenga en cuenta que si eres agresivo sobre el almacenamiento en caché de este bloque de manera gobbal, esto se romperá. Caché por página, o en cualquier granularidad que intente cambiar el bloque. Para cada filtro que desea ocultar, va a poner algo de lógica en $form['#access'] Por lo tanto, Drupal puede mirar el elemento de formulario, mirar la página en la que está y ocultar ese elemento de forma porque no está en uso.

Si se basa en la ruta de la página actual, puede hacer algo como esto:

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

Esto le dice a Drupal que oculte el elemento imaginario 'taxonomy_b_filter' si se ve la ruta de página actual http://example.com/section.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top