it-swarm-es.com

¿Puedo tener un controlador de campo de vistas con una forma expuesta, o un controlador de filtros con pre_query?

Básicamente, está en el título, pero aquí está la pregunta:

Estoy tratando de crear una manera de permitir que el usuario que vea una vista para controlar qué columnas son visibles. Esto no es muy difícil, siempre que pueda llamarse en el lugar correcto. Específicamente, necesito ser llamado en tres lugares:

  • en algún tipo de panel de configuración.
  • en la forma expuesta
  • en la función pre_render

Ambos manipuladores de campo y los manipuladores de filtro obtienen un panel de configuración. Pero solo los manipuladores de filtro pueden afectar la forma expuesta, y solo los manipuladores de campo obtienen acceso a la función Pre_Render.

Aunque podría ser capaz de hacer algo trabajando combinando un controlador con varios ganchos, preferiría que todo estaría juntos.

¿Alguien sabe cómo convencer las vistas para llamar a un manejador de campos al hacer la forma expuesta, o para llamar a un manejador de filtros para la función Pre_Render?

2
Ricky Morse

Resulta que el objeto view tiene una propiedad para cada clase de manejadores que deben llamarse. Entonces, para llevar un manejador de filtros y tenerlo como campo, debe agregarlo a la matriz field

function query () {
    $this->view->field[$this->options['id']] = $this;
}

Su filtro se llamará entonces como campo. Lo encontré útil, después de que terminé, para eliminar el filtro del conjunto de manipuladores de campo:

function pre_render ($values) {
    // do stuff here

    unset($this->view->field[$this->options['id']]);
}
0
Ricky Morse

Si entiendo su pregunta correctamente, aquí es como lo haría.

Lo que necesita hacer es crear una vista de nodo base. Esto debería tener todos los campos que estén presentes, independientemente de otras opciones seleccionadas. Querrá al menos un filtro expuesto, de modo que las vistas hagan un formulario que pueda enganchar para alterar el formulario. Su proceso para modificar la vista sobre la marcha será dos veces.

  • El primero será un hook_form_alter () en el que realiza las modificaciones necesarias para el formulario de vistas expuestas. Agregue en cualquier elemento de formulario personalizado que utilizará para controlar los campos que se muestran en la vista. En su controlador de envíos, deberá rellenar los valores de formulario en sesión, para que pueda acceder a ellos más tarde.

  • El segundo es usar hook_menu_alter para anular el manejo de páginas predeterminado en las vistas y proporcionar su propia devolución de llamada. En esa devolución de llamada deberá cargar y mostrar la vista programáticamente. También puede agregar/eliminar campos adicionales que se mostrarán en la mosca llamando $ Vista-> OverLe_Option ('Campos', Array ($ some_fields));. Recomiendo mirar las vistas exportadas para obtener el formato adecuado para esto, ya que cualquier cosa que vea, hay que hacerlo válido antes de ejecutar la vista. Después de haber agregado los campos que necesita, simplemente devuelva $ Vista-> ejecutute_display (); para representar la vista. Puede ver un ejemplo de donde hago esto en http://890234892342.privatepaste.com/6b72c3e011 - En este caso, solo estoy intercambiando las visitas de visitas/filtros/argumentos sobre la marcha , pero exactamente el mismo método funcionará para agregar/eliminar campos. Una vez más, mirando el código de vistas exportados es un gran método para comprender cómo puede intercambiar estas cosas sobre la marcha. Al intentar averiguar el formato para modificaciones que necesito hacer, en realidad modifico la vista, expórtelo, mira el código exportado y luego vuelva a volver a lo que fue originalmente. Esto me permite ver cómo las vistas están formatizando varios campos y qué matriz debo pasar a $ Vistas:> Sobreopciones () para obtener el comportamiento deseado.

No es un proceso particularmente fácil de explicar ni explicar ni hacerlo, pero este es un método eficaz para alterar programáticamente las vistas sobre la marcha. Siéntase libre de hacer preguntas de seguimiento si hay algo que no entiende.

1
beeradb