it-swarm.it

Eseguire una vista senza rendering

Vorrei eseguire una vista a livello di codice (fornendo argomenti) e ottenere i risultati grezzi, senza renderlo. È possibile?

Quando uso $view->preview('default', $args); converte i risultati in HTML. So di poter usare $view->result per iterare i risultati grezzi, ma il rendering personalizzato che sto usando per alcuni campi è difettoso e mi dà un WSOD (non ho interesse o capacità di riparare il renderer, è un caso Edge :))

Sto usando Views 3 con Drupal 7

8
Daniel

Esiste già una funzione che fa esattamente quello che vuoi:

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

Maggiori informazioni alla sua pagina su api.drupal.org:

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

7
Alexar

$ view-> preview () viene generalmente utilizzato per visualizzare semplicemente il display, in altre parole lo renderà tramite il formato specificato.

$ view-> execute_display () restituisce anche la visualizzazione nel formato pertinente specificato nella vista.

Penso che potrebbe essere necessario eseguire l'esecuzione diretta della query, ad esempio db_query ()

3
Colin McClure

Dovresti avere successo se inserisci view::preview() nel tuo codice, ma lo cambi in modo che, invece di chiamare ->display_handler->preview(), chiami ->execute() invece:

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

Questo dovrebbe funzionare perché, per la maggior parte dei gestori di display, la chiamata a ...->display_handler->preview() è in realtà solo un wrapper attorno a una chiamata a view::render(). Che a sua volta inizia chiamando $this->execute(...).

0
J-P