Как отобразить запрос, выполняемый представлением 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 в комментариях.)


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


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

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