zoukankan      html  css  js  c++  java
  • drupal7指定menu高亮问题

    起因:
    项目要求在一个内容内页中高亮某个menu,而这个menu与内容不相关。drupal的menu高亮,其实是给menu中的li添加active class并会显示出这个menu下的sub-menu。但默认只有两种情况:
    1. 当前地址与menu指向的地址一致; 
    2. 当前地址与menu的某个sub-menu指向的地址一致
    而目前这个内容页并没有关联某个menu。
    分析:
    到官方search了一下,发现有menu_set_active_item这个API可以设置当前menu,还有两个回复解决方法,就用这个方法试试。
    解决过程:
    我把以下代码写在template.php里面
    theme_preprocess_page(&$variables) {
       if(isset ($variables['node']->type) && $variables['node']->type == 'article')   
         menu_set_active_item('mypath');
       }
    }
    

    menu的确高亮了!但整个页面显示了mypath的内容,没有到article内页。

    menu_set_active_item的源代码很简单:
    function menu_set_active_item($path) {
      $_GET['q'] = $path;
    }
    

    原来这个函数只是设置path,而因为module都依赖path来确认当前路径,所以这个函数会导致页面显示不正常。按照这个线索,就可以很容易地实现我想要的效果。

    因为我的menu是用menu_block来输出,所以就在menu_block_block_view的添加代码
    if(arg(0) == 'node' && is_numeric(arg(1))) {
      $node = node_load(arg(1));
      if(isset ($node->type) && $node->type == 'news') {
          $old_q = $_GET['q'];
          $_GET['q'] = 'news-list';
      }
    }
    

    结果成功了!

    ps: 其实原理就是在menu输出之前把path修改,让menu误以为当前页是你指定的path,到menu输出之后需要把path恢复,否则将会影响其他module。

  • 相关阅读:
    cv2 Qt Platform plugin "cocoa" not found error
    开发scrapy web界面(一)
    java2smali python 粘合脚本
    react如何设置代理
    Nginx启动不了失败原因
    前端,后端,服务器如何部署,转载
    匿名函数普通函数和构造函数
    闭包的认识
    各种命名规范,打好基础才能建设高楼
    mongoose常用操作
  • 原文地址:https://www.cnblogs.com/catcat811/p/2151850.html
Copyright © 2011-2022 走看看