it-swarm-fr.com

Exécuter une vue sans rendu

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

Lorsque j'utilise $view->preview('default', $args);, il convertit les résultats en HTML. Je sais que je peux utiliser $view->result pour 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 Edge :))

J'utilise Views 3 avec Drupal 7

8
Daniel

Il existe déjà une fonction qui fait exactement ce que vous voulez:

  $result = views_get_view_result('my_view_name', 'default', $arg1, $arg2, ...);

En savoir plus sur sa page sur api.drupal.org:

https://api.drupal.org/api/views/views.module/function/views_get_view_result/7

7
Alexar

$ 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 la requête directement, c'est-à-dire db_query ()

3
Colin McClure

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

$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() n'est en fait qu'un wrapper autour d'un rappel à view::render(). Ce qui lui-même commence par appeler $this->execute(...).

0
J-P