我是新手,已经开始编写模块。我需要在 1 个模块中添加多个视图。我使用 hook_views_api() 和 hook_views_data() 添加了 1 个视图。请问有人可以帮助在单个模块中添加更多视图吗?
问问题
2870 次
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 回答