2010-02-25 15 views
8

Chcę wyświetlić kwerendę, która jest wykonywana w widoku drupal. Aktualnie w edytorze widoku wyświetla zapytanie, ale muszę użyć tego zapytania w moim kodzie, aby pobrać wersję tego widoku.Jak wyświetlić zapytanie wykonane przez widok Drupala

Czy istnieje sposób, aby uzyskać wykonane zapytanie w taki sam sposób, jak pokazano w oknie "edytora" menu widoków? Chcę tego w momencie wyświetlenia widoku.

Co mam zamiar zrobić, to przechwycić zapytanie w stopce i umieścić to zapytanie w procesie, który odeśle zestaw wyników XLS. Więc chciałbym dokładnego zapytania, którego używa widok do wyświetlenia wyników.

Odpowiedz

3

Zapytanie istnieje w obiekcie widoku. W zależności od tego, gdzie chcesz go użyć, możesz dodać zmienną w funkcji przeglądania widoków lub w miejscu, do którego wywołujesz widok (jeśli programujesz go w sposób programistyczny).

Jeśli tylko przy użyciu domyślnego szablonu dla niego chociaż można mieć do niego dostęp tam:

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

być ostrożnym, jeśli proces trwa arbitralne SQL choć może lepiej byłoby nazwać to z wyświetl nazwę i niech programowo zbierze wyniki zgodnie z wymaganiami. Lub mieć dodatkowy wyświetlacz w widoku, który zwraca wynik w zestawie wyników XLS bezpośrednio.

+0

Wygląda to mniej więcej to, co chcę, ale staram się umieścić to w „stopce” kontra view.tps.php. Próbowałem dodawać globals $ view, ale nic nie zwróciło. Wygląda to obiecująco, jeśli mogę to zrobić działa. –

+0

Woot, jestem prawie na miejscu, działałem, ale nie zastępowałem danych formularza. Czego brakuje? $ current_view = views_get_current_view(); print db_prefix_tables ($ current_view-> build_info ["zapytanie"]); Jednak zapytanie powraca z [sql przycięte] WHERE (node.status <> 0) AND (node.type IN ('% s')) AND (casetracker_case.case_status_id = '% s') ORDER BY node_comment_statistics_last_updated DESC Jak mogę włączyć podstawienie% s? –

+0

Gotowy do pracy przy użyciu query_args i uruchomiony przez sprintf. Dzięki tobie zaoszczędzisz mi dużo pracy. –

4

Ustaw stopce na format wejściowy do PHP i wklej ten fragment kodu do tekstu stopki:

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

dla zapytania podświetlaniem składni (przy geshifilter.module), należy użyć następującego fragmentu:

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

(Wyjaśnione z odpowiedzi @ Owen i dyskusja z @ Mech-Software w komentarzach.)

0

Jak wyprowadzać zapytania do widoku na ekranie.

To działa na mnie w Drupal 7.

przejdź do:

views/plugins/views_plugin_query_default.inc

znaleźć tę funkcję:

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

tuż przed samym końcem funkcji, użyj dpq ($ query);

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

jak marginesie, na wywóz Excel Czy próbowałeś Wyświetleń moduł eksportu danych?

6

Albo można użyć hook_views_pre_execute wraz z funkcją DPQ devel za:

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