把quicktabs模块改造成能够以标签切换来显示节点内容。

quicktabs模块本身只能以block的形式来显示内容。

我有一种节点类型-课程类型(course),课程里包含课程介绍和课程大纲,我想以标签切换的形式来显示。我觉得quicktabs模块的显示效果挺炫的,所以改造

quicktabs模块,来以标签切换的方式来显示课程类型的节点的内容。

直接在quicktabs.module里面添加hook_nodeapi函数。函数写法如下:

function quicktabs_nodeapi(&$node, $op, $teaser) {
  switch ($op) {
    case 'view':
    if($node->type=='course'){
     
     $delta = 1;//这个数字就固定了,固定调用创建的第一个quicktabs的样式
     
      if ($jqueryblock = db_fetch_object(db_query('SELECT qtid, title, tabs FROM {quicktabs} WHERE qtid = %d', $delta))) {
            
        quicktabs_add_css();
        drupal_add_js(drupal_get_path('module', 'quicktabs') .'/js/quicktabs.js');
        $mainblock['subject'] = $jqueryblock->title;
        $tabs = unserialize($jqueryblock->tabs);
       
        if ($tabs[0]['weight']) {
          foreach ($tabs as $key => $tab) {
            $weight[$key]  = $tab['weight'];
          }
          array_multisort($weight, SORT_ASC, $tabs);
        }
        $tabtitles = array();
        foreach ($tabs as $tab) {
          $tabtitles[] = $tab['title'];
        }
       
        $output = '<div class="quicktabs_wrapper">';
        $output .= theme('quicktabs_tabs', $tabtitles);   
        $output .= '<div class="quicktabs_main">';
       //
        foreach ($tabs as $j => $tab) {
         
          $output .= '<div class="quicktabs">';
          if ($tab['type'] == 'view') {
           
            if (module_exists('views')) {
             
              if ($tab['args']!='') {
                $args = explode(',', $tab['args']);
              }
              else {
                $args = array();
              }  
                       
              $view = views_get_view($tab['bvid']);//本函数通过view的名字或者vid输出一个view,如果都没有的话,如果数据库没找到,则输出一个默认的

view
              
              $viewbuild = $tab['build'] ? $tab['build'] : variable_get('quicktabs_viewbuild', 'embed');
              
                           //两个标签显示的内容要区分开
              if($j==0){
               $output .= $node->content['field__0']['#value'];//建立一个基本的view
               $output .= $node->content['field_']['#value'];
               $output .= $node->content['field__1']['#value'];
               $output .= $node->content['field__2']['#value'];
               $output .= $node->content['field__3']['#value'];
               $output .= $node->content['field__4']['#value'];
              }
              elseif($j==1){
               $output .= $node->content['field__5']['#value'];
              }
            }
            else {
              $output .= 'Views module not enabled, cannot display tab content';
            }
           
          }
         
          $output .= '</div>';
        }
        $output .= '</div></div>'; 
        $mainblock['content'] = $output;
      }
      //加上fieldset是为了让切换菜单能够正常显示    
     $node->content['body']['#value'] = '<fieldset id="quicktabs-course-node">
   </fieldset>'.$mainblock['content'];
     //下面这段的作用是让cck添加的字段都不显示出来,而是由上面的那句代码显示
     $node->content['field__0']['#value']='';
     $node->content['field_']['#value']='';
     $node->content['field__1']['#value']='';
     $node->content['field__2']['#value']='';
     $node->content['field__3']['#value']='';
     $node->content['field__4']['#value']='';
     $node->content['field__5']['#value']='';
     
    }
      break;
   
  }
}

再在quicktabs.css里最后写一个样式
/*chinajason add*/
#quicktabs-course-node{
 height:1px;
 border: 0;
 margin-top: 0;
 padding-top:0;
  background: transparent no-repeat center top;
}

以上添加完后就会显示出你想要的标签效果。

 quicktabs