Как отобразить запрос, выполненный представлением Drupal - PullRequest
9 голосов
/ 26 февраля 2010

Я хочу отобразить запрос, который выполняется в представлении drupal. В настоящее время в редакторе представлений он показывает запрос, однако мне нужно использовать этот запрос в моем коде для загрузки версии представления в формате Excel.

Есть ли способ получить выполненный запрос так же, как он отображается в окне "редактор" меню представлений? Я хочу это в то время, когда отображается вид.

То, что я планирую сделать здесь, - это захватить запрос в нижнем колонтитуле и отправить этот запрос процессу, который отправит обратно набор результатов XLS. Поэтому мне бы хотелось, чтобы точный запрос, который используется в представлении, отображал результаты.

Ответы [ 7 ]

7 голосов
/ 23 апреля 2014

Или вы можете использовать hook_views_pre_execute вместе с функцией dvel devel:

function MY_MODULE_views_pre_execute(&$view) {
  dpq($view->build_info['query']);
}
4 голосов
/ 05 января 2011

Установите формат ввода нижнего колонтитула на PHP и вставьте этот фрагмент в текст нижнего колонтитула:

<code><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;
?>

Для запроса с подсветкой синтаксиса (используя geshifilter.module) используйте следующий фрагмент:

<code><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');
?>

(Происходит от ответа @ Owen и обсуждения с @ Mech-Software в комментариях.)

3 голосов
/ 26 февраля 2010

Запрос существует в объекте просмотра. В зависимости от того, где вы хотите его использовать, вы можете добавить переменную в функцию предварительной обработки представлений или местоположение, в котором вы вызываете представление (если вызываете его программно).

Если вы просто используете для него шаблон по умолчанию, вы можете получить к нему доступ:

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

Будьте осторожны, если ваш процесс использует произвольный SQL, хотя, может быть, лучше назвать его с именем представления и заставить его программно получать результаты по мере необходимости. Либо у вас на экране будет вторичное отображение, которое напрямую возвращает результат в наборе результатов XLS.

2 голосов
/ 26 февраля 2010

Модуль devel может регистрировать запросы для вас.

0 голосов
/ 19 марта 2014

как примечание стороны, для экспорта в Excel, пробовали ли вы модуль экспорта данных Views?

0 голосов
/ 25 июня 2013

Как вывести запросы просмотра на экран.

Это работает для меня в 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;
  }
0 голосов
/ 26 февраля 2010

http://drupal.org/project/views_bonus поможет экспортировать из Views.

...