回答
你也许可以做到这一点无论是通过一个主题或模块实现preprocess_page的(THEMENAME_preprocess_page(& $瓦尔)或MODULENAME_preprocess_page(& $瓦尔)),但高于Mac是在观点正确不知道是空的或不直到他们运行,所以会有性能问题。
在函数,你应该能够访问结构化的主要环节阵列,这样你就可以运行该视图:
$view = views_get_view('view_name');
// Swap out 'default' for a different display as needed. Also, $args are arguments, and can be left out if not applicable.
$output = $view->preview('default', $args);
if (empty($view->result)) {
// The view has no results, alter the primary links here to remove the link in question.
}
我已经准备好了相互矛盾的任何时刻,因为我从来没有实现过类似的事情,但我的印象是,既然意见基本上是对查询的数据库,你不能真正知道,如果一个视图是空的,直到你实际上调用它。
考虑到 - 考虑到您正在谈论主链接(几乎显示在您网站的每个页面上),这可能会造成严重的性能下降,具体取决于视图的复杂性和“缓存性”。
您还应该考虑是否其他用户可以在“我们”用户同时浏览网站时更改该视图的内容:如果视图在“我们”用户加载页面后填充,“我们“用户永远不会知道。
至于如何要达到你想要的,请看看接受的答案。
HTH!
使用由于菜单被缓存,hook_menu_alter不会跟上视图的动态特性。例如,如果在构建菜单路由器时视图没有结果,那么menu_alter的实现将不会添加该项目。然后,如果视图突然开始返回结果,那么直到重建菜单才会将该项目添加到菜单中。 – jhedstrom 2009-12-03 01:42:20
用于指向性能命中的 – dusan 2009-12-03 12:44:02
@jhedstrom - 关于缓存的好处!我很高兴“随时准备好与之相矛盾”!我编辑了原始文章并插入了一行指向您的答案,以便将来的读者不会感到困惑。 – mac 2009-12-03 12:52:34
我重写views_embed_view()
只有当有内容提供输出,然后叫我重写从主题层:
function mymodule_embed_view($name, $display_id = 'default') {
// handle any add'l args (this hook supports optional params)
$args = func_get_args();
array_shift($args);
if (count($args)) {
array_shift($args);
}
$view = views_get_view($name);
$output = $view->preview($display,$args);
if ($view->result) {
return $output;
}
}
然后在模板文件:
<?php
$view = mymodule_embed_view('view_name');
if (strlen($view) > 0) {
print $view;
}
?>
- 1. 如果集合视图为空,则删除子视图
- 2. 子视图隐藏表视图iphone
- 3. MVC局部视图隐藏主视图
- 4. 视图隐藏tabbarcontroller
- 5. 将链接视为Google即时视图或动态链接视图的截图视图(如何?)
- 6. 隐藏超视图而不隐藏其子视图
- 7. 在ConstraintLayout中隐藏从属视图时隐藏视图
- 8. 如果src为空,则隐藏图像
- 9. 如果表格为空,则从视图中隐藏字段和字段名称
- 10. neteans从视图隐藏包
- 11. MBProgressHUD视图不隐藏
- 12. openerp搜索视图隐藏
- 13. 应用LayoutParams隐藏视图
- 14. 长时间隐藏视图
- 15. UINavigationBar隐藏子视图
- 16. Android视图隐藏,拖动
- 17. Appcelerator视图隐藏动画
- 18. 显示/隐藏视图
- 19. 隐藏视图draggin up
- 20. main.xml隐藏视图帮助
- 21. 显示/隐藏子视图
- 22. IOS Swift如何隐藏表格视图中的图像空间
- 23. 为UITableViewController的子视图隐藏UIToolBar
- 24. 我如何隐藏视图在列表视图根据位置
- 25. 如何在Recycler视图中隐藏广告视图
- 26. 如何将视图从alpha值1设置为0,隐藏视图,将视图从0设置为1,然后取消隐藏视图?
- 27. 视图上的空指针
- 28. 如何显示容器视图视图控制器和隐藏容器视图视图控制器
- 29. fullcalendar中的月视图(删除/隐藏“日”和“周”视图)
- 30. 在其他视图的滚动中隐藏视图
+1,但有一个附加说法:'$ view-> preview'不仅构建视图,而且还呈现它,这是不必要的开销。 '$ view-> execute'也会填充结果属性,但是会节省额外的处理时间来处理它(它只是构建并运行查询)。 – 2009-12-03 14:01:37
有用的代码 - 谢谢:) – MrFidge 2010-12-15 12:01:20