对成年人来说,经常回忆往事,品位细节,能让人更有想象力…

添加Drupal的Tags功能

BLOGGY 11094浏览 0评论

一些修改
1.文章的Tags功能:
一直在找tags的模块,但是似乎那个awTags已经没有开发了,在网上查的资料是Drupal4.7以后的版本已经自带了这个功能了,就是使用freetagging,具体方法是:
drupal的分类就是tag,在词汇表中如果选了“自由标签”就是tag功能了,可以建两个词汇表,一个做主分类,一个做tag

带来的一些问题以及解决方法:
(1).文章分类显示的代码,需要做一些修改,不然连tags也给显示出来了,这个我用一个比较笨的办法实现了,就是指定一下vid
<?php
if (user_access('access content')) {
$result = db_query("SELECT d.tid, d.name, COUNT(*) AS count FROM {term_data} d INNER JOIN {term_node} USING(tid) INNER JOIN {node} n USING (nid) WHERE n.status = 1 and d.vid=7 GROUP BY d.tid,d.name ORDER BY d.weight ASC,d.name");
$items = array();
while ($category = db_fetch_object($result)) {
   $items[] = l($category->name .' ('. $category->count .')','taxonomy/term/'. $category->tid);
}
return theme('item_list', $items);
}
?>

(2).那个文章的上一页下一页显示出现了问题,只要添加了tag,就不能正确显示(这是使用了官方提供的修改代码,参见: http://drupal.org/node/45050),经过对老鬼提供的代码的修改,已经很好的解决了这个问题,但是似乎没有解决在同一分类中显示上一页,具体参见:http://bbs.chinahtml.com/86151

修改方法:
template.php:

function previous_node($node, $previous_node_text=NULL,$button_type, $prepend_text=NULL, $append_text=NULL)  //显示上下页

   switch ($button_type) {
     case 'next':
       $sort= 'DESC';
       $case = '< ';
       $pos ='Next:';
       break;
     case 'prev':
       $sort = 'ASC';
       $case = '> ';
       $pos ='Previous:';
       break;
     default:
       return NULL;
       break;
   }
        $query = db_rewrite_sql("SELECT nid, title FROM {node} WHERE created ".$case." '%s' AND status=1 and promote=1 AND

type='%s' ORDER BY created ".$sort." LIMIT 1", "node", "nid");
        $result = db_query($query, $node->created, $node->type);
        $previous_node = db_fetch_object($result);
        if(!$previous_node_text) // If previous_node_text is not specified then use the previous node's title as the text for

the link.
        {
            $previous_node_text = $previous_node->title;     
        }     
        if($previous_node->nid!=NULL)
        {
            return $prepend_text.l($previous_node_text, 'node/'.$previous_node->nid, array

('title'=>$pos.''.$previous_node_text.'', 'class'=>'goto-previous-node')).$append_text;
        }
        else // This node does not have a previous node...
        {
            return NULL;
        }
    }     

node.tpl.php:
<?php
        if($page!=0)
        {
            $previous_node_link = previous_node($node, NULL,'prev', '&lt;&lt; ', NULL);
            $next_node_link = previous_node($node, NULL,'next',  NULL,'&gt;&gt; ');     
            print '<div class="entry-meta" align="right">';
            if($previous_node_link && $next_node_link)
            {
                print $previous_node_link.' | '.$next_node_link;
            }
            else if($previous_node_link)
            {
                print $previous_node_link;
            }
            else if($next_node_link)
            {
                print $next_node_link;
            }
            print '</div>';
        }
?>   

(3).通过theme区别显示一般分类与freetag标签:http://www.verydummy.com/blog/node/103
修改方法:
在template.php中的_phptemplate_variable() 函数中添加如下代码:
<?php
  function _phptemplate_variables($hook, $vars) {
  if ($hook == 'node') {
    if (module_exists('taxonomy')) {
      foreach (taxonomy_get_vocabularies($vars['node']->type) as $vid=>$vocab) {
        foreach (taxonomy_node_get_terms_by_vocabulary($vars['node']->nid, $vid) as $term) {
          if ($vocab->tags) {
            //方案1
            $tag_links[] = array('title' => $term->name, 'href' => taxonomy_term_path($term), 'attributes' => array

('rel'=>'tag', 'title'=>$term->description));
            //方案2
            //$tag_links[] = l($term->name, taxonomy_term_path($term), array('rel' => 'tag', 'title' => $term->description));
          }
          else {
            //方案1
            $term_links[] = array('title' => $term->name, 'href' => taxonomy_term_path($term), 'attributes' => array

('rel'=>'tag', 'title'=>$term->description));
            //方案2
            //$term_links[] = l($term->name, taxonomy_term_path($term), array('rel' => 'tag', 'title' => $term-

>description));
          }
        }
      }
      //方案1
      $vars['myterms'] = theme('links', $term_links, array('class'=>'links inline'));
      $vars['mytags']  = theme('links', $tag_links,  array('class'=>'links inline'));
      //方案2,这里的'|'可以用你自己的分隔符替代
      //$vars['myterms'] = $term_links ? implode('|', $term_links) : '';
      //$vars['mytags'] = $tag_links ? implode('|', $tag_links) : '';
    }
  }
  return $args;
}
?>
注意上面列出了两个方案,区别不过是输出的theme格式不同。方案1使用theme_links函数将所有的分类或tag通过 <ul><li> 这样的列表输出;方案2则是直接将表单展平以字符串的形式输出。一般来说,表单输出的可控性更高更灵活,但过于复杂,如果只是要通过分隔符的形式在一行显示,那么方案2也就够用了,这也是沿袭原来awTags的格式。
在node.tpl.php里面控制输出位置,可以在模版里直接调用新引入的两个变量 $myterms 和 $mytags 。
输出分类:
<?php if ($taxonomy): ?>
      <div class="terms"><?php print $myterms ? ></div>
<?php endif; ?>

输出tags:
<?php if ($mytags): ?>
      <div class="tags"><span id="tagbox">Tags</span><? php print $mytags ? ></div>
<?php endif;?>

2.改造评论(comments)的显示
(1)首先到管理 >> 评论 >> 设置下面把评论显示改成"平板(旧帖在前)"。同时禁用评论标题,毕竟大多数评论标题也没什么意义,而且可以自动截取。
在comment.tpl.php中删除如下这句:<?php print $title ?>
(2)在适当位置输出发帖的时间:
<span class="submitted"><?php print t('!date', array('!date' => format_date($comment->timestamp))); ?></span>
(3)在template.php中的_phptemplate_variable() 函数中添加如下代码,产生一个评论的序号:
<?php
  if ($hook == 'comment') {
    $comment = $vars['comment'];
    $pagenum = $_GET['page'] ? $_GET['page'] : 0;
    $num = variable_get('comment_default_per_page', '50')*$pagenum + $vars['id'];
    $pagequery = $pagenum ? 'page='. $pagenum : NULL;
    $vars['commentn'] = l('#'.$num, $_GET['q'], NULL, $pagequery, "comment-$comment->cid");
    return $vars;
  }
?>
在comment.tpl.php里面适当位置加上:
<span class='comment-num'><?php print $commentn; ?> - <?php print t('!username', array('!username' => theme('username', $comment))); ?></span>
这是显示发帖人和评论序号的。

更多的有关Drupal的东西请看:http://www.loosky.net/?q=drupalzhinan

转载请注明:自由的风 » 添加Drupal的Tags功能

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (4)

  1. 有没有对tag自动生成内文链接的插件推荐?找这个东西头疼。
    如果有,可以发到我邮箱吗?

    上善若水2009-11-21 22:58 回复
    • 不好意思,对这个没有什么要求。。。呵呵

      自由的风2009-11-22 12:24 回复
  2. 指定vid 这个有点勉强呃

    荒野无灯2011-07-11 12:44 回复
    • @ 荒野无灯
      好几年前玩过Drupal,现在没用了。界面比较丑,而且耗资源,玩起来不容易啊。老鬼同学都很郁闷。 :twisted:

      自由的风2011-07-11 16:00 回复