Как отобразить запрос, выполняемый представлением Drupal
Я хочу отобразить запрос, который выполняется в представлении drupal. В настоящее время в редакторе представлений отображается запрос, однако мне необходимо использовать этот запрос в своем коде для загрузки версии представления excel.
Есть ли способ получить выполненный запрос таким же образом, как он показан в окне "редактор" меню "Представления"? Я хочу этого в то время, когда отображается представление.
Что я планирую здесь сделать, так это записать запрос в нижнем колонтитуле и отправить этот запрос в процесс, который отправит обратно набор результатов XLS. Поэтому я хотел бы получить точный запрос, используемый представлением для отображения результатов.
7 answers
Запрос существует в объекте представления. В зависимости от того, где вы хотите его использовать, вам может потребоваться добавить переменную в функцию предварительной обработки представлений или местоположение, в котором вы вызываете представление (если вызываете его программно).
Если вы просто используете для этого шаблон по умолчанию, вы можете получить к нему доступ там:
// 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 в комментариях.)
Модуль devel может регистрировать запросы для вас.
Http://drupal.org/project/views_bonus поможет экспортировать из представлений.
Как выводить запросы просмотра на экран.
Это работает для меня в Drupal 7.
Перейдите к:
Просмотры/плагины/просмотры_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;
}
В качестве примечания, для экспорта в Excel, вы пробовали модуль экспорта данных представлений?