如何覆盖Drupal视图查询?

时间:2010-11-15 18:07:21

标签: drupal drupal-views

如何在代码中使用自定义SQL查询替换Views 3查询?

3 个答案:

答案 0 :(得分:4)

据我了解,您可以使用hook_views_query_alter修改查询。我想你也可以用它来代替查询。以下是一些hook_views_query_alter示例,以帮助您入门:

答案 1 :(得分:1)

这可能不再与您相关,但是在Implementing custom SQL query for Views / Filters上Drupal.org上似乎是一个非常有用的讨论,看起来它正在回答我的类似问题。

特别是,最初的海报建议附加到钩子views_views_pre_execute,其他人提到的可以放入自定义模块,如:

function mymodulename_views_pre_execute(&$view) {
   if($view->name=="groups_list2") {
      // ...
      $view->build_info['query'] = "SELECT node.nid AS nid ".
         "FROM node WHERE node.type='%s'"; // wrapped for legibility
   }
}

另一张海报提到了mySQL ViewsTable Wizarddirect link),虽然他们确实提到了它值得记住this article about mySQL Views performance

这绝对值得阅读Drupal.org上的整个帖子,因为我觉得它非常有用;我希望其他人也这样做。

更新:确实,这正是我们现在正在做的事情 - 在自定义模块中覆盖views_views_pre_execute以在新SQL到达数据库之前注入新SQL。我在Slow query with large dataset in Drupal views — better to process in SQL or PHP?开了一个关于Drupal.SE的类似(但更具体)的问题,你可能觉得它很有用。

答案 2 :(得分:-2)

如果要执行自定义SQL(视图无法生成),例如计算字段或复杂的SQL连接,那么您所需要的是自定义模块。

请参阅drupal以获取入门指南