代码之家  ›  专栏  ›  技术社区  ›  dusan

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

  •  2
  • dusan  · 技术社区  · 15 年前

    我有一个Drupal6.14站点,带有视图模块。我有一个视图,在主链接上我放置了一个指向该视图的链接。

    只有当视图为空时,才可以隐藏主菜单中的链接?

    3 回复  |  直到 15 年前
        1
  •  6
  •   jhedstrom    15 年前

    您可以通过预处理页面(themename预处理页面(&$vars)或modulename预处理页面(&$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.
     }
    
        2
  •  2
  •   mac    15 年前

    我随时准备被反驳,因为我从来没有实现过这样的事情。 但是,我的印象是,由于视图本质上是对数据库的查询,所以在实际调用视图之前,您实际上无法知道视图是否为空。

    考虑到这一点,考虑到您所说的是主要链接(几乎显示在站点的每一页上),这可能会严重影响性能,这取决于视图的复杂性和它的“可缓存性”。

    您还应该考虑该视图的内容是否可以被“我们的”用户同时浏览该站点的其他用户更改:如果在“我们的”用户加载该页面后视图变为填充状态,“我们的”用户将永远不会知道。

    就这样 怎样 为了达到你想要的效果,请看接受的答案。

    嗯!

        3
  •  0
  •   mikewaters    15 年前

    我超越 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;
      }
    ?>