Drupal Views - Как вернуть информацию о представлении, которое отображается - PullRequest
1 голос
/ 21 июля 2011

У меня проблемы с обработкой хуков для модуля Views в Drupal. То, что я пытаюсь сделать, это определить, какое представление визуализируется, чтобы я мог его идентифицировать и внести в него изменения. Я не знаю заранее, над каким видом я работаю.

В приведенном ниже коде я заменил свое фактическое имя модуля на «MODULENAME».

В моем файле .module я включил файл MODULENAME.views.inc со следующим:

    include_once ( dirname(__FILE__) . '/MODULENAME.views.inc');

В файле .views.inc у меня есть функция MODULENAME_views_api:

    function MODULENAME_views_api() {
      return array('api' => 2, 'path'=> drupal_get_path('module', 'MODULENAME'),
      );
    }

Те, кажется, работают просто отлично. Итак, теперь я пытаюсь приступить к делу с настоящим крючком ...

    function MODULENAME_views_pre_render(&$view) {
      $get_view_info = $view->name;
      echo $get_view_info;
    }

    MODULENAME_views_pre_render();

Проблема в том, что это выдает ошибку "Отсутствует аргумент 1 для MODULENAME_views_pre_render ().

Итак, очевидно, что я ожидаю, что я передам какой-нибудь идентификатор, чтобы сказать ему, какой вид мне нужен. Но в этом весь смысл этой функции - определить, какой вид визуализируется. Если бы я знал ответ на этот вопрос, то мне не нужно было бы вызывать функцию в первую очередь.

Я что-то упускаю из виду? Есть ли вызов функции, который я могу использовать для возврата этого идентификатора?

1 Ответ

1 голос
/ 22 июля 2011

Вы цепляетесь за вещи с помощью реализации перехватчиков, так что эта часть вашего кода в порядке:

<?php
function MODULENAME_views_pre_render(&$view) {
  $get_view_info = $view->name;
  echo $get_view_info;
}

Но это:

<?php
MODULENAME_views_pre_render();

Почему? Вы не генерируете представление, Представления есть. Это не ваша работа, чтобы вызвать крючок. Вы просто реализуете это.

Итак, вам нужно внести изменения в представление? Вы делаете это прямо здесь:

<?php
function MODULENAME_views_pre_render(&$view) {
  if ($view->name == 'TheViewIWantToModify') {
      // Make some changes to the $view
  }
}

И это все.

Также обратите внимание, что в зависимости от типа изменений, которые вы хотите сделать, вы могли бы захотеть реализовать другой хук вместо hook_views_pre_render (). Взгляните на файл docs / docs.php , который поставляется с Views (по крайней мере, версия 6.x-2.12, я не знаю, какая у вас версия, и кстати, вы должны указать это) и начинаете Как и 538, вы увидите несколько хуков типа hook_views_pre_ и hook_views_post_ (то есть их описания, чтобы вы знали, для чего каждый из них полезен), а затем вы можете решить, какой из них реализовать в вашем модуль.

...