以编程方式将视图添加到drupal 7中的自定义模块

时间:2013-05-28 19:01:40

标签: drupal drupal-7 drupal-views

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

2 个答案:

答案 0 :(得分: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”文件,并在清除缓存后自动加载它们。

希望这有助于那些仍然被困住的人。

答案 1 :(得分:0)

请务必声明hook_views_api()或此挂钩不会被解雇。

但您可以通过hook_views_default_views()

执行此操作

Views中,您可以创建要包含在模块中的视图。然后使用函数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将返回所有视图。