Ejecuta una vista sin renderizar

8

Me gustaría ejecutar una vista mediante programación (proporcionando argumentos) y obtener los resultados sin procesar, sin representarlos. ¿Es posible?

Cuando lo uso $view->preview('default', $args);convierte los resultados a HTML. Sé que puedo usar $view->resultpara iterar los resultados sin procesar, pero el renderizado personalizado que estoy usando para algunos campos tiene errores y me da un WSOD (no tengo interés o capacidad para arreglar el renderizador, es un caso extremo :))

Estoy usando Views 3 con Drupal 7

Daniel
fuente
Quizás $ view-> execute () pueda ayudar. Ejemplo simple: drupal.stackexchange.com/questions/9121/…
kalabro

Respuestas:

3

$ view-> preview () se usa generalmente para ver simplemente la pantalla, por lo que, en otras palabras, la representará a través del formato especificado.

$ view-> execute_display () también devuelve la pantalla en el formato relevante especificado en la vista.

Creo que es posible que deba ejecutar la consulta directa, es decir, db_query ()

Colin McClure
fuente
Supongo que tendré que recurrir a construir la consulta yo mismo con db_query. Gracias por ayudar :)
Daniel
0

Debería tener algo de éxito si termina view::preview()en su propio código, pero cámbielo para que, en lugar de llamar ->display_handler->preview(), llame en su ->execute()lugar:

$view = views_get_view($view_name);
$view->set_display($display_name);
$view->preview = TRUE;
$view->pre_execute($args);
$view->execute($display_name);

Esto debería funcionar porque, para la mayoría de los controladores de pantalla, la llamada a ...->display_handler->preview()es en realidad solo un contenedor alrededor de una llamada de regreso view::render(). Que en sí mismo comienza llamando $this->execute(...).

JP
fuente