Как отобразить запрос, выполняемый представлением Drupal


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

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

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

Author: smokris, 2010-02-26

7 answers

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

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

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

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

 3
Author: Owen, 2010-02-26 00:02:16

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

function MY_MODULE_views_pre_execute(&$view) {
  dpq($view->build_info['query']);
}
 6
Author: Felix Eve, 2014-04-23 13:45:32

Установите формат ввода нижнего колонтитула на 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 в комментариях.)

 4
Author: smokris, 2011-01-05 19:29:26

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

 2
Author: googletorp, 2010-02-25 22:55:57

Http://drupal.org/project/views_bonus поможет экспортировать из представлений.

 0
Author: Nikit, 2010-02-25 23:04:20

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

Это работает для меня в 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;
  }
 0
Author: mcaleaa, 2013-06-25 10:58:32

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

 0
Author: arcsum, 2014-03-19 09:49:23