Как отобразить запрос, выполняемый представлением Drupal
Я хочу отобразить запрос, который выполняется в представлении drupal. В настоящее время в Редакторе представлений отображается запрос, однако мне нужно использовать этот запрос в коде для загрузки версии представления excel.
есть ли способ получить выполненный запрос таким же образом, как он показан в окне "Редактор" меню "Виды"? Я хочу это в то время, когда отображается представление.
Что я планирую сделать здесь, это захватить запрос в нижнем колонтитуле и опубликовать этот запрос к процессу, который отправит обратно набор результатов XLS. Поэтому я хотел бы получить точный запрос, который использует представление для отображения результатов.
7 ответов
запрос существует в объекте view. В зависимости от того, где вы хотите его использовать, вы можете добавить переменную в функцию preprocess представлений или местоположение, которое вы вызываете представление (если вызываете его программно).
Если вы просто используете шаблон по умолчанию для него, вы можете иметь доступ к нему там:
// ex. somewhere in your views-view--VIEW_NAME.tpl.php
<?php print db_prefix_tables($view->build_info['query']); ?>
будьте осторожны, если ваш процесс принимает произвольный SQL, хотя, может быть, лучше вызвать его с именем представления и программно забрать результаты по мере необходимости. Или есть дополнительный дисплей на вашем представлении, который возвращает результат в результирующем наборе XLS напрямую.
или вы можете использовать hook_views_pre_execute
вместе с функцией dpq devel:
function MY_MODULE_views_pre_execute(&$view) {
dpq($view->build_info['query']);
}
установите входной формат нижнего колонтитула в 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 в комментариях.)
http://drupal.org/project/views_bonus поможет экспортировать из представлений.
Как выводить запросы просмотра на экран.
это работает для меня в 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;
}