"Flag 模块完全使用指南Drupal专注于收藏的模块-Drupal每日推荐一模块"

Published on Aug. 22, 2023, 12:10 p.m.

flag模块是一个灵活的标记制度,是完全可通过管理员进行定制。使用此模块,网站管理员可以对任意数量的节点、评论、用户进行标记。这些标记包括书签、标记重要、朋友或检举。您可以创建自定义清单流行内容或监视重要内容。flag标记可以是全局的,也可以是个人的。全局的标记意味着你可以标记如精华评论、重点内容等,而个人标记则可能是我的收藏、推荐等,与每个用户相关。flag模块是一个灵活的标记模块,使用这个模块可以标记任意的节点、评论、用户等内容,可以通过这个模块将节点标记为精华、垃圾或者你想做的任何标记.flag模块还可以和views2进行整合进行操作,同时flag还支持action.在官方网站上有非常详细的文档.
flag模块中用图片替代链接的处理
flag模块默认为使用的是文本链接,如何使用图片来替代文本链接,这里给出了一个解决方法在模板的中加入预处理函数,就是在模板文件的template.php文件中,加入下列代码
function phptemplate_preprocess_flag(&$vars) {
$image_file = path_to_theme() . ‘/flag-’ . $vars[‘flag_name_css’] . ‘-’ . ($vars[‘action’] == ‘flag’ ? ‘off’ : ‘on’) . ‘.png’;
// Uncomment the following line when debugging.
//drupal_set_message(“Flag is looking for ‘$image_file’…”);
if (file_exists($image_file)) {
$vars[‘link_text’] = ‘<img src=”‘ . base_path() . $image_file . ‘” />’;
}
}
注意事项
flag组件下的theme目录中的flag.tpl.php要复制到模板目录中
要加入图片文件(flag-flagname-on.png,flag-flagname-off.png,)
清空缓存之后,再看效果
使用Flag来标记精华评论
flag模块是一个灵活的标记模块,使用这个模块可以标记任意的节点、评论、用户等内容,可以通过这个模块将节点标记为精华、垃圾或者你想做的任何标记.flag模块还可以和views2进行整合进行操作,同时flag还支持action.在官方网站上有非常详细的文档.下面我就讲讲利用Flag模块,给评论加个精华。安装Flag模块和所有模块一样,下载,在模块设置中进行安装.配置Flag模块全局的flag和私人的flag,在flag模块中,标记分为全局和私人的2类,如果是私人flag,那么每个有仅进行标记的人都可以去更改它,而不会影响他人,如对文章进行收藏,全局的flag改变之后对所有用户都会影响,如管理员对评论进行加精,那么所有人都会看到这个精华标志.用admin/build/flags进行对flag进行设置:flag 模块配置简解flag 模块增加flagflag 模块配置增加好之后,在前台就可以对评论节点进行精华标志。flag views配置把区块放到模板的指定位置,就可以看到精华评论。Flag模块在模板中运用。前面这些工作完成之后,当然还没完,怎么加入精华的评论与一般评论没有区别,那还要针对模板进行一些设置。参考这里的内容打开模板文件中的template.php文件,加入phptemplate_preprocess_comment函数static $flags;
if (!module_exists(‘flag’)) {
return;
}
if (!isset($flags)) {
$flags = flag_get_flags(‘comment’);
}
// Note: is_flagged() and get_count() use internal cache,
// so using them won’t result in issuing excessive SQL queries.
$classes = array();
$cid = $vars[‘comment’]->cid;
foreach ($flags as $flag) {
$css_name = str_replace(‘_’, ‘-’, $flag->name);
if ( $flag->is_flagged($cid)) {
$classes[] = ‘comment-flagged-’ . $css_name;
}
}
$vars[‘flag_classes’] = implode(‘ ‘, $classes);这段是取得是否标志精华,如果是的话,加了一个$vars[‘flag_classes’]的类。这个东东就可以在comment.tpl.php文件中使用。<!– start comment.tpl.php –>
<div class=”comment <?php print $comment_classes;?>  clear-block”>
<?php print $picture ?>
<?php if ($comment->new): ?>
<a id=”new”></a>
<span class=”new”><?php print $new ?></span>
<?php endif; ?>
<h3 class=”title <?php echo $flag_classes; ?>“><?php print $title ?></h3>
<div class=”submitted”>
<?php print $submitted ?>
</div>
<div class=”content”>
<?php print $content ?>
<?php if ($signature): ?>
<div class=”signature”>
<?php print $signature ?>
</div>
<?php endif; ?>
</div>
<?php if ($links): ?>
<div class=”links”>
<?php print $links ?>
</div>
<?php endif; ?>
</div>
<!– /end comment.tpl.php –>红色部份是我加入的代码,如果是精华的话,那么会在标题中有一个CSS类叫comment-flagged-picks,其中picks是我flag name.然后在你的模板CSS文件中加入.comment-flagged-picks{
background: url(‘images/raquo.png’) no-repeat left 0.833em; //图片当然自己去找
padding-left: 13px;
}### 特别注意

Flag模块也是支持模板的,但其中的模板文件是用flag–flagname.tpl.php,是2个-,一个不留神,搞了好长。flag 模块在模板中ajax的显示在模板中应用flag变量之后,已经可以标示出精华评论了,美中不足的是尽管加入是有ajax效果,但不能直接在标题中显示出来,如何在标题中也同步显示出来呢?复制flag模块的theme目录到你的模板目录中去修改flag.tpl.php为flag–flagname.tpl.php(只针对特定的flag标记应用模板)打开这个文件之后,把原来加入的CSS和JS文件去了,加入自己的,用下列代码修改$current_theme = variable_get(‘theme_default’,’none’);drupal_add_css(drupal_get_path(‘theme’, $current_theme) .’/flag.css’);drupal_add_js(drupal_get_path(‘theme’, $current_theme) .’/flag.js’);打开flag.js,80行左右if (data.status) {// Success.$(‘#c’+data[‘contentId’]).toggleClass(‘comment-flagged-picks’ );//这个是我加入的,为了在成功之后,在当前的评论增加/移除类comment-flagged-picksdata.link = $wrapper.get(0);当然还要修改comment.tpl.php<h3 class=”title <?php echo $flag_classes; ?>” id=”<?php echo ‘c’.$comment->cid; ?>”><?php print $title ?></h3>//红色部分加入是要让js找到要标示的元素,我是用C+评论ID来识别的。OK,经过这样之后,点击加入精华的链接,能同时给评论标题增加/移除类,达到同步的效果。以上内容整理自http://joom.net.ru