Как использовать hook_views_query_alter ()?

После того, что указано в документации для hook_views_query_alter () , я создал файл с именем alterform.views.inc и поместил его в разрешенный модуль под названием alterform. Я добавил следующий код в alterform.views.inc .but не работает.

function alterform_views_query_alter(&$view, &$query) {
  switch($view->name) {
    case 'myViewName':  
      echo 'test test'; // test       
      $query->orderby[0] = "FIELD(node.type, 'story', 'page', 'productTypeC', 'productTypeD') ASC";
      $query->orderby[1] = "node_title ASC";
      break;
  }
}

почему он не выводит «тестовый тест»? Что случилось с моим кодом?

по-прежнему нет выхода тестов и просмотров. что случилось с моим кодом? спасибо

20 голосов | спросил enjoylife 19 Mayam11 2011, 11:50:27

5 ответов


22

Right. Чтобы «делать» что-либо с представлениями в модуле, вы должны реализовать hook_views_api. Без этого ваш модуль вообще не будет распознаваться «Views» (AFAIK).

Добавьте в код модуля следующее:

/**
 * Implementation of hook_views_api().
 */
function alterform_views_api() { // your module name into hook_views_api
  return array(
    'api' => 2,
    // might not need the line below, but in any case, the last arg is the name of your module
    'path' => drupal_get_path('module', 'alterform'),
  );
}

Это должно исправить это, чтобы ваш модуль был хотя бы распознан, и вы можете начать его отладку:)

Хороший способ начать отладку представления (т. е. шаг ребенка) состоит в том, чтобы поставить dpm($view); прямо в начале выполняемой вами функции views. В большинстве случаев это приведет к выгрузке информации на экран, который поможет вам увидеть, где вы находитесь. Предлагаю сделать это с установленным /включенным devel.module.

Изменить: это предполагает Views 2 и Drupal 6. Лучше спросите, не являются ли они вашим оружием выбора.

ответил NikLP 19 Maypm11 2011, 20:57:51
5

вы можете протестировать 3 вещи:

  • очистить кеш
  • загрузить и включить Devel ,
  • используйте dpm() вместо echo()
  • test $view->name с помощью dpm()
ответил Manu 19 Maypm11 2011, 12:01:36
3

Вам нужно поместить файл yourmodule.views.inc в каталог модуля, а не в подкаталог, или Views не может автоматически получить его.

ответил shaneonabike 7 12011vEurope/Moscow11bEurope/MoscowMon, 07 Nov 2011 23:35:16 +0400 2011, 23:35:16
2
    $query->orderby[0] = "FIELD(node.type, 'story', 'page', 'productTypeC', 'productTypeD') ASC";

должен быть

    $query->orderby[0]['field'] = "field_name ASC";
ответил tan 12 MonEurope/Moscow2011-12-12T16:39:31+04:00Europe/Moscow12bEurope/MoscowMon, 12 Dec 2011 16:39:31 +0400 2011, 16:39:31
0

, если вы используете каталог для yourmodule.views.inc, вам нужно указать его путь в файле модуля, используя код, похожий на следующий:

    'path' => drupal_get_path('module', 'mymodule') . '/subdirectory/';
ответил tan 12 MonEurope/Moscow2011-12-12T16:32:46+04:00Europe/Moscow12bEurope/MoscowMon, 12 Dec 2011 16:32:46 +0400 2011, 16:32:46

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132