2010-02-25 3 views
8

Desidero visualizzare la query eseguita nella vista drupal. Attualmente nell'editor di visualizzazione mostra la query tuttavia ho bisogno di usare quella query nel mio codice per scaricare una versione excel della vista.Come visualizzare la query eseguita dalla vista Drupal

Esiste un modo per ottenere la query eseguita nello stesso modo in cui viene visualizzata nella finestra "Editor" del menu Visualizza? Lo voglio nel momento in cui viene mostrata la vista.

Quello che ho intenzione di fare qui è quello di acquisire la query nel piè di pagina, e avere quella query inviata a un processo che invierà indietro un resultset XLS. Quindi mi piacerebbe la query esatta che la vista sta usando per visualizzare i risultati.

risposta

3

La query esiste nell'oggetto visualizzazione. A seconda di dove si desidera utilizzarlo, è possibile aggiungere la variabile in una funzione di pre-elaborazione delle viste o la posizione in cui si sta chiamando la vista (se la si chiama in modo programmatico).

Se stai usando solo il modello predefinito per esso, però, si può avere accesso ad esso c'è:

// ex. somewhere in your views-view--VIEW_NAME.tpl.php 
<?php print db_prefix_tables($view->build_info['query']); ?> 

essere attenti se il processo richiede SQL arbitrario, però, può essere meglio chiamarla con il visualizzare il nome e farlo raccogliere in modo programmatico come richiesto. Oppure, avere una visualizzazione secondaria sulla vista che restituisce direttamente il risultato in un set di risultati XLS.

+0

Questo sembra più o meno quello che voglio, ma sto cercando di mettere questo nel "footer" vs il view.tps.php. Ho provato ad aggiungere variabili globali $ vista ma è tornato nulla. Questo sembra promettente se riesco a farlo funzionare. –

+0

Woot, ci sono quasi, l'ho fatto funzionare ECCETTATO per la sostituzione dei dati del modulo. Cosa manca? $ Visualizzazione_corrente = views_get_current_view(); stampa db_prefix_tables ($ current_view-> build_info ['query']); Tuttavia, la query ritorna con [sql clipped] WHERE (node.status <> 0) AND (node.type IN ('% s')) AND (casetracker_case.case_status_id = '% s') ORDINA BY node_comment_statistics_last_updated DESC Come faccio ad avere la sostituzione% s incluso? –

+0

Funziona usando query_args ed eseguendolo tramite sprintf. Grazie mille, mi hai risparmiato un sacco di lavoro. –

4

Impostare del piè di pagina Input Format a PHP e incolla questo frammento nel testo piè di pagina:

<pre><?php 
    $v = views_get_current_view(); 
    $query = db_prefix_tables(vsprintf($v->build_info['query'], $v->build_info['query_args'])); 
    $replacements = module_invoke_all('views_query_substitutions', $v); 
    $query = str_replace(array_keys($replacements), $replacements, $query); 
    echo $query; 
?></pre> 

Per una query sintassi-evidenziata (utilizzando geshifilter.module), utilizzare il seguente frammento:

<pre><?php 
    require_once drupal_get_path('module', 'geshifilter') .'/geshifilter.pages.inc'; 
    $v = views_get_current_view(); 
    $query = db_prefix_tables(vsprintf($v->build_info['query'], $v->build_info['query_args'])); 
    $replacements = module_invoke_all('views_query_substitutions', $v); 
    $query = str_replace(array_keys($replacements), $replacements, $query); 
    echo geshifilter_process($query, 'sql'); 
?></pre> 

(derivante dalla risposta di @ Owen e dalla discussione con @Mech-Software nei commenti)

0

Come visualizzare le query di visualizzazione sullo schermo.

Questo funziona per me in Drupal 7.

vai a:

views/plugins/views_plugin_query_default.inc

trovare questa funzione:

/** 
* Generate a query and a countquery from all of the information supplied 
* to the object. 
* 
* @param $get_count 
* Provide a countquery if this is true, otherwise provide a normal query. 
*/ 
function query($get_count = FALSE) { 

poco prima della fine della funzione, utilizzare dpq ($ query);

// Add all query substitutions as metadata. 
    $query->addMetaData('views_substitutions', module_invoke_all('views_query_substitutions', $this)); 
dpq($query); 
    return $query; 
    } 
0

come nota a margine, per l'esportazione excel, hai provato Visualizzazioni Data Export modulo?

6

Oppure si può utilizzare hook_views_pre_execute insieme con la funzione di DPQ devel:

function MY_MODULE_views_pre_execute(&$view) { 
    dpq($view->build_info['query']); 
}