0

我是新手,已经开始编写模块。我需要在 1 个模块中添加多个视图。我使用 hook_views_api() 和 hook_views_data() 添加了 1 个视图。请问有人可以帮助在单个模块中添加更多视图吗?

4

2 回答 2

1

这个话题已经沉寂多年,但一直没有正确的答案。所以请允许我。

上面的问题是你在同一个文件中列出你的视图,这是混乱和无组织的。下面是一种更合适、更直接的做事方式。

首先,我建议在您的模块目录中创建一个文件夹,例如"YOUR_MODULE/views/"

然后对于您要导入的每个视图,您将创建一个新文件,例如“my_view.inc”,其中一个文件是一个视图。如果您以后需要进行更改,这样可以更轻松地找到您正在寻找的视图。

然后是声明您将使用哪个 api 进行导入。

 /**
 * Implements hook_views_api().
 */
function YOUR_MODULE_views_api() {
  return array(
    'api' => '3.0',
  );
}

声明 api 版本后,您将需要以下内容。

/**
 * Implements hook_views_default_views().
 */    
function YOUR_MODULE_views_default_views() {
  $views = array();
  $path = drupal_get_path('module', 'YOUR_MODULE') . '/views/*.inc';

  foreach(glob($path) as $file) {
    require_once $file;
    $views[$view->name] = $view;
    unset($view);
  }

  return $views;
}

这样做是在子目录中查找所有“my_view.inc”文件,并在清除缓存后自动加载它们。

希望这可以帮助那些仍然被困的人。

于 2017-05-19T10:28:34.940 回答
0

一定要声明hook_views_api()否则这个钩子不会被触发。

但是你可以通过hook_views_default_views()

Views中,您创建要包含在模块中的 View。然后使用函数 hook_views_default_views() 并附加导出代码(来自视图),如下所示:

function yourmodulename_views_default_views() {
  // Begin copy and paste of output from the Export tab of a view.
  $view = new view;
  // ..yadda yadda yadda

  // Add view to list of views to provide.
  $views[$view->name] = $view;

  // Begin copy and paste of output for another view
  $view = new view;
  // ..yadda yadda yadda

  // Add view to list of views to provide.
  $views[$view->name] = $view;

  return $views
}

函数末尾的 return $views 将为您返回所有视图。

于 2013-05-28T21:51:18.220 回答