Выполнить вид без рендеринга

8

Я хотел бы программно выполнить представление (предоставив аргументы) и получить необработанные результаты, без его рендеринга. Является ли это возможным?

Когда я использую $view->preview('default', $args);это преобразует результаты в HTML. Я знаю, что могу использовать $view->resultдля итерации необработанные результаты, но пользовательский рендеринг, который я использую для некоторых полей, содержит ошибки и дает мне WSOD (у меня нет интереса или возможности исправить рендерер, это крайний случай :))

Я использую Views 3 с Drupal 7

Даниил
источник
Может быть, $ view-> execute () может помочь. Простой пример: drupal.stackexchange.com/questions/9121/…
kalabro

Ответы:

3

$ view-> preview () обычно используется для простого просмотра дисплея, иными словами, он будет отображаться в указанном формате.

$ view-> execute_display () также возвращает отображение в соответствующем формате, указанном в представлении.

Я думаю, что вы, возможно, должны привести к выполнению запроса напрямую, т.е. db_query ()

Колин МакКлюр
источник
Полагаю, мне просто придется самостоятельно создать запрос с помощью db_query. Спасибо за помощь :)
Даниэль
0

Вы должны добиться успеха, если заглушите view::preview()свой собственный код, но измените его так, чтобы вместо вызова ->display_handler->preview()он вызывал ->execute():

$view = views_get_view($view_name);
$view->set_display($display_name);
$view->preview = TRUE;
$view->pre_execute($args);
$view->execute($display_name);

Это должно работать, потому что для большинства обработчиков отображения вызов to ...->display_handler->preview()на самом деле является просто оболочкой для обратного вызова view::render(). Которая сама начинается с звонка $this->execute(...).

JP
источник