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;
}
以上添加完后就会显示出你想要的标签效果。

