Exécuter une vue sans rendu

8

Je voudrais exécuter par programme une vue (en fournissant des arguments) et obtenir les résultats bruts, sans les rendre. C'est possible?

Quand je l'utilise, $view->preview('default', $args);il convertit les résultats en HTML. Je sais que je peux utiliser $view->resultpour itérer les résultats bruts, mais le rendu personnalisé que j'utilise pour certains champs est bogué et me donne un WSOD (je n'ai aucun intérêt ou capacité à corriger le rendu, c'est un cas de bord :))

J'utilise Views 3 avec Drupal 7

Daniel
la source
Peut-être que $ view-> execute () peut vous aider. Exemple simple: drupal.stackexchange.com/questions/9121/…
kalabro

Réponses:

3

$ view-> preview () est généralement utilisé pour afficher simplement l'affichage, c'est-à-dire qu'il le restituera via le format spécifié.

$ view-> execute_display () renvoie également l'affichage dans le format approprié spécifié dans la vue.

Je pense que vous devrez peut-être exécuter directement la requête, c'est-à-dire db_query ()

Colin McClure
la source
Je suppose que je devrai simplement recourir à la construction de la requête moi-même avec db_query. Merci d'avoir aidé :)
Daniel
0

Vous devriez obtenir un certain succès si vous vous retrouvez view::preview()dans votre propre code, mais changez-le de sorte qu'au lieu d'appeler ->display_handler->preview(), il appelle à la ->execute()place:

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

Cela devrait fonctionner car, pour la plupart des gestionnaires d'affichage, l'appel à ...->display_handler->preview()est en fait juste un wrapper autour d'un rappel view::render(). Ce qui lui-même commence par appeler $this->execute(...).

JP
la source