2010-02-25 2 views
8

Ich möchte die Abfrage anzeigen, die in der Drupal-Ansicht ausgeführt wird. Momentan im Ansichtseditor wird die Abfrage angezeigt, aber ich muss diese Abfrage in meinem Code verwenden, um eine Excel-Version der Ansicht herunterzuladen.So zeigen Sie die Abfrage an, die von der Drupal-Ansicht ausgeführt wird

Gibt es eine Möglichkeit, die ausgeführte Abfrage auf dieselbe Weise zu erhalten, wie sie im "Editor" -Fenster des Ansichten-Menüs angezeigt wird? Ich möchte das zu dem Zeitpunkt, zu dem die Ansicht angezeigt wird.

Was ich hier zu tun beabsichtige ist, die Abfrage in der Fußzeile zu erfassen, und diese Abfrage an einen Prozess gesendet, der eine XLS-Ergebnismenge zurücksenden wird. Also ich möchte die genaue Abfrage, die die Ansicht verwendet, um die Ergebnisse anzuzeigen.

Antwort

3

Die Abfrage existiert im View-Objekt. Je nachdem, wo Sie es verwenden möchten, können Sie die Variable in einer Vorverarbeitungsfunktion für Ansichten hinzufügen oder den Speicherort, an dem Sie die Ansicht aufrufen (wenn sie programmgesteuert aufgerufen wird).

Wenn Sie nur die Standardvorlage für sie jedoch verwenden, können Sie den Zugriff auf dort haben:

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

Seien Sie vorsichtig, wenn Ihr Prozess obwohl beliebige SQL dauert, kann besser sein, es zu nennen mit der Ansichtsname, und er kann die Ergebnisse nach Bedarf abrufen. Oder haben Sie eine sekundäre Anzeige in Ihrer Ansicht, die das Ergebnis in einem XLS-Ergebnis direkt zurückgibt.

+0

Diese mehr oder weniger sieht, was ich will, aber ich versuche, dies in die „Footer“ gegen den Rest der view.tps.php zu setzen. Ich habe versucht, globale $ view hinzuzufügen, aber es gab nichts zurück. Das sieht vielversprechend aus, wenn ich es zum Laufen bringen kann. –

+0

Woot, ich bin fast da, ich habe es funktioniert, außer für die Substitution der Formulardaten. Was fehlt? $ current_view = views_get_current_view(); Drucken db_prefix_tables ($ current_view-> build_info ['query']); Die Abfrage kommt jedoch mit [sql beschnitten] WHERE (node.status <> 0) UND (node.type IN ('% s')) UND (casetracker_case.case_status_id = '% s') ORDER BY node_comment_statistics_last_updated DESC zurück Wie bekomme ich die% s Substitution? –

+0

Funktioniert mit den query_args und führt das durch sprintf aus. Vielen Dank, du hast mir eine Menge Arbeit erspart. –

4

das Eingabeformat zu PHP Fußzeile, und fügen Sie diesen Code in die Fußzeile Text:

<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> 

Für eine Syntax-markierten Abfrage (mit geshifilter.module), verwenden Sie den folgenden Ausschnitt:

<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> 

(Stammt aus @ Owens Antwort und Diskussion mit @ Mech-Software in den Kommentaren.)

0

So geben Sie Suchanfragen auf dem Bildschirm aus.

Dies funktioniert für mich in Drupal 7.

gehen zu:

views/plugins/views_plugin_query_default.inc

diese Funktion finden:

/** 
* 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) { 

kurz vor dem Ende Verwenden der Funktion dpq ($ query);

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

als eine Randnotiz, für den Export von Excel Haben Sie versucht Ansichten Data Export-Modul?

6

Oder können Sie hook_views_pre_execute verwenden zusammen mit dpq Funktion des Entwick:

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