Как переопределить Drupal Views Query? - PullRequest
5 голосов
/ 15 ноября 2010

Как заменить запрос Views 3 на собственный запрос SQL в коде?

Ответы [ 3 ]

4 голосов
/ 23 июля 2011

Насколько я понимаю, вы можете использовать hook_views_query_alter для изменения запроса. Я хотел бы предположить, что вы также можете использовать его для замены запроса. Вот пара примеров hook_views_query_alter, чтобы вы начали:

1 голос
/ 29 марта 2012

Это может больше не относиться к вам, но есть то, что кажется очень полезным обсуждением на Drupal.org на Реализация пользовательского запроса SQL для Views / Filters , который выглядит так, как будто он отвечает на мой аналогичный вопрос.

В частности, в первоначальном плакате было предложено прикрепить к крючку 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 Views и Table Wizard ( прямая ссылка ), хотя они упомянули, что стоит иметь в виду эту статью о Производительность MySQL Views

Определенно стоит прочитать всю ветку на Drupal.org, хотя, как мне показалось, это действительно полезно; Я надеюсь, что кто-то другой тоже.

Обновление: Действительно, это именно то, что мы сейчас делаем - переопределение views_views_pre_execute в пользовательском модуле для внедрения нового SQL перед тем, как он попадет в базу данных. Я открыл аналогичный (но более конкретный) вопрос о Drupal.SE в Медленный запрос с большим набором данных в представлениях Drupal - лучше обрабатывать в SQL или PHP? , что может оказаться полезным.

0 голосов
/ 16 ноября 2010

Если вы хотите выполнить пользовательский SQL (который представления не могут генерировать), например, вычисляемые поля или сложные объединения SQL, то вам нужен пользовательский модуль.* руководство по началу работы

...