Tengo varios tipos de nodos, cada uno de ellos referenciado a vocabulario de términos de taxonomía diferente. Para la categoría que muestra, uso el módulo taxonomy_display.
Por ejemplo, tenemos dos categorías: tacos y bolas de billar.
Cues tiene precio desde, precio hasta y filtros de tipo madera. Pero las bolas no tienen filtro de madera.
Por lo tanto, necesito eliminar el filtro de tipo de madera si taxonomy_term tid hace referencia al vocabulario de bolas de billar.
Por lo tanto, necesito eliminar uno de los muchos filtros expuestos mediante programación.
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]);
}
El campo de filtro se elimina con éxito, pero recibí un aviso de php:
Notice: Undefined index: field_wood_reference_tid in function views_handler_filter_term_node_tid->exposed_validate()
También trato de eliminar el campo en hook_pre_execute (), pero con el mismo resultado:
function modulename_views_pre_execute(&$view) {
$filter_field = 'filter_id';
unset($view->display_handler->handlers['filter'][$filter_field]);
unset($view->filter[$filter_field]);
}
Pruebe también con el método override_option () como aquí: http://groups.drupal.org/node/82219 , pero no hay ningún resultado.
¿Alguna sugerencia? Por favor ayuda =)
Gracias a todos por la respuesta, pero todavía no tengo respuesta. Tal vez algo no está claro? = (
?filter_id=val
, las vistas devuelven una pantalla vacía o un error de elección ilegal ...Respuestas:
Me gustaría utilizar hook_form_alter utilizando no definido en el objeto de formulario que se encuentra en su ejemplo para el elemento que desea eliminar.
fuente
Aquí está el fragmento probado que le permitirá eliminar los filtros de las vistas expuestas usando el formulario alter como lo menciona Scott Thomas,
Además de eliminar el campo del formulario, también debe eliminar la información de un filtro particular que está disponible en $ form ['# info'], para que también elimine la etiqueta. Si elimina solo el elemento de formulario, la etiqueta del filtro se mostrará a pesar de que se elimine el campo, así que asegúrese siempre de eliminar también esta información.
Modifique esto de acuerdo a su necesidad. Si desea realizar este para una vista particular, agregue una condición para eso también,
Aquí $ form_state ['view'] le dará el objeto de vista actual que se está procesando.
Espero que esto ayude.
fuente
Sigue los pasos a continuación
A continuación, intente con el siguiente código
unset ($ form ['# info'] ['your_field_name']); $ form ['your_field_name'] ['# access'] = 'FALSE';
Espero que ayude.
fuente
Puede eliminar el filtro expuesto utilizando el archivo de plantilla también.
Usa este comando:
En el archivo de plantilla encuentre este código:
Y quítalo. Su filtro expuesto se eliminará de la pantalla, pero seguirá funcionando si pasa los argumentos adecuados en la URL.
fuente
Corrígeme si me equivoco porque no estoy seguro de entender completamente tu problema. ¿Entonces le gustaría ocultar un filtro expuesto en una vista dependiendo del valor de otro filtro expuesto? Si es así, puede probar el módulo de Filtros dependientes de vistas . Lo usé varias veces y hace el trabajo.
Puede consultar la reseña de nuestro amigo Lullabot sobre este módulo.
Si realmente necesita hacerlo en código, la opción expuesta debería funcionar: filtro [$ filter_id] -> opciones ['expuesta'] = FALSO;
fuente
$view->display_handler->handlers['filter'][$filter_field]->options['exposed'] = FALSE;
tengo un error fatalPHP Fatal error: Call to undefined method stdClass::access() in .../view.inc on line 766
. Creo que es el comportamiento correcto porque si el filtro no está expuesto, también requiere un valor predeterminado. ¿Algunas ideas?Lo siguiente lo hizo por mí dentro de hook_form_alter:
fuente
Método 1
Mediante el uso de hook_views_query_alter (). Vea el siguiente ejemplo:
Método 2
Vea el ejemplo utilizando hook_views_pre_execute y una función personalizada que intenta encontrar la condición de campo correcta y devolverle la referencia:
fuente
Lo estoy eliminando de los archivos de plantilla. Anule el archivo views-view.tpl.php y elimine el siguiente código:
fuente
Creo que la operación estaba en el camino correcto. Tuve una situación similar sin filtros expuestos, por lo que no pude usar el método hook_form_alter. Aquí hay un código de ejemplo para cualquier persona que se encuentre con esto:
El objeto de vista no tiene una
remove_item
función, sino que simplemente establece en el código que puede establecerlo como nulo para eliminar un elemento que incluye filtros:views/includes/view.inc
en línea2526
.Aquí hay un ejemplo completo para cualquier persona que se dirija a una vista y pantalla específicas:
fuente