我有一个带有Views模块的Drupal 6.14站点。我有一个视图,在主要链接上我放置了一个链接到视图。
只有在视图为空时,才能隐藏主菜单中的链接?
答案 0 :(得分:6)
您可以通过preprocess_page(THEMENAME_preprocess_page(& $ vars)或MODULENAME_preprocess_page(& $ vars))的主题或模块实现来执行此操作,但上面的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.
}
答案 1 :(得分:2)
我随时准备反对,因为我从未实现过类似的任何内容,但是我的印象是,由于视图本质上是针对数据库的查询,因此您实际上无法知道是否存在视图为空,直到您实际调用它为止。
考虑到这一点 - 鉴于您正在谈论主要链接(几乎显示在您网站的每个页面上),这可能会严重影响性能,具体取决于视图的复杂程度及其“可缓存性”。
您还应该考虑在“我们的”用户同时浏览网站的其他用户是否可以更改该视图的内容:在“我们的”用户加载页面后,视图是否会填充“我们的”用户永远不会知道。
正如如何实现您想要的,请参阅接受的答案。
HTH!
答案 2 :(得分:0)
我覆盖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;
}
?>