如果视图为空,则隐藏视图视图的链接

时间:2009-12-02 15:01:32

标签: drupal drupal-6

我有一个带有Views模块的Drupal 6.14站点。我有一个视图,在主要链接上我放置了一个链接到视图。

只有在视图为空时,才能隐藏主菜单中的链接?

3 个答案:

答案 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;
  }
?>