我想显示在drupal视图中执行的查询。目前在视图编辑器中显示查询但是我需要在我的代码中使用该查询来下载视图的Excel版本。
有没有办法让执行的查询与在视图菜单的“编辑器”窗口中显示的方式相同?我希望在显示视图时这样做。
我打算在这里做的是在页脚中捕获查询,并将该查询发布到将发回XLS结果集的进程。所以我想查看视图用于显示结果的确切查询。
答案 0 :(得分:7)
或者您可以使用hook_views_pre_execute
以及devel的dpq函数:
function MY_MODULE_views_pre_execute(&$view) {
dpq($view->build_info['query']);
}
答案 1 :(得分:4)
将页脚的输入格式设置为PHP,并将此代码段粘贴到页脚文本中:
<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>
对于突出显示语法的查询(使用geshifilter.module
),请使用以下代码段:
<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>
(来自@ Owen在评论中与@ Mech-Software的回答和讨论。)
答案 2 :(得分:3)
查询存在于视图对象中。根据您要使用它的位置,您可能希望在视图预处理函数中添加变量,或者在调用视图的位置(如果以编程方式调用它)。
如果你只是使用默认模板,你可以在那里访问它:
// ex. somewhere in your views-view--VIEW_NAME.tpl.php
<?php print db_prefix_tables($view->build_info['query']); ?>
如果您的进程采用任意SQL,请小心,最好使用视图名称调用它,并按编程方式按需要获取结果。或者,在视图上显示辅助显示,直接在XLS结果集中返回结果。
答案 3 :(得分:2)
devel模块可以为您记录查询。
答案 4 :(得分:0)
http://drupal.org/project/views_bonus将有助于从视图中导出。
答案 5 :(得分:0)
作为附注, 对于excel导出,您是否尝试过Views Data Export Module?
答案 6 :(得分:-1)
如何将视图查询输出到屏幕。
这适用于Drupal 7。
转到:
视图/插件/ views_plugin_query_default.inc
找到这个功能:
/**
* 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) {
在函数结束之前,使用dpq($ query);
// Add all query substitutions as metadata.
$query->addMetaData('views_substitutions', module_invoke_all('views_query_substitutions', $this));
dpq($query);
return $query;
}