代码之家  ›  专栏  ›  技术社区  ›  Mech

如何显示Drupal视图执行的查询

  •  8
  • Mech  · 技术社区  · 15 年前

    我想显示在Drupal视图中执行的查询。当前在视图编辑器中,它显示查询,但是我需要在代码中使用该查询来下载视图的Excel版本。

    有没有一种方法可以像视图菜单的“编辑器”窗口中显示的那样获得执行的查询?我想在显示视图时显示这个。

    我在这里要做的是捕获页脚中的查询,并将该查询发布到一个将返回XLS结果集的流程中。所以我希望视图用于显示结果的确切查询。

    7 回复  |  直到 11 年前
        1
  •  3
  •   Owen Ryan Doherty    15 年前

    查询存在于视图对象中。根据您想在哪里使用它,您可能需要在视图预处理函数中添加变量,或者添加您调用视图的位置(如果以编程方式调用它)。

    但是,如果您只是使用默认模板,那么您可以在那里访问它:

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

    但是,如果您的进程采用任意SQL,最好使用视图名称来调用它,并让它根据需要通过编程获取结果。或者,在视图上有一个辅助显示,它直接将结果返回到XLS结果集中。

        2
  •  6
  •   Felix Eve    11 年前

    或者你可以使用 hook_views_pre_execute 以及Devel的DPQ功能:

    function MY_MODULE_views_pre_execute(&$view) {
      dpq($view->build_info['query']);
    }
    
        3
  •  4
  •   smokris    14 年前

    将页脚的输入格式设置为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软件的讨论。)

        4
  •  2
  •   googletorp    15 年前

    这个 devel 模块可以为您记录查询。

        5
  •  0
  •   Nikit    15 年前

    http://drupal.org/project/views_bonus 将有助于从视图中导出。

        6
  •  0
  •   mcaleaa    12 年前

    如何将视图查询输出到屏幕。

    这在Drupal7中对我有用。

    去:

    视图/插件/视图\插件\查询\默认值.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;
      }
    
        7
  •  0
  •   arcsum    11 年前

    作为旁注, 对于Excel导出,您尝试过查看数据导出模块吗?