Drupal无法将最新评论链接到相应评论分页的问题解决

很难想像Drupal这么强大的CMS系统发展这么长时间到现在的6.x版为止还是没有修复这个问题,7.x没有测试过。
解决方法有点点麻烦,可以新建一个module,modulename_block函数中$block['content']内容由如下代码获取:

$node_types = array();
$comments_per_page = array();
$comments_pages = array();
 
foreach (get_user_recent() as $comment) {
	$page = 0;
 
	if(isset($comments_pages[$comment->cid])) {
		$page = $comments_pages[$comment->cid];
	} else {
		$nid = $comment->nid;
		if(!isset($node_types[$nid])) {
			$node_types[$nid] = db_result(db_query("SELECT type FROM {node} WHERE nid=%d", $nid));
		}
		$node_type = $node_types[$nid];
		if(!isset($node_type)) {
			$node_type = 'unknown';
		}
		if(!isset($comments_per_page[$node_type])) {
			$comments_per_page[$node_type] = variable_get('comment_default_per_page_' . $node_type, 10);
		}
		$cpp = $comments_per_page[$node_type];
 
		$sort_mode = variable_get('comment_default_mode_'. $node_type, COMMENT_MODE_THREADED_EXPANDED);
		$display_order = variable_get('comment_default_order_'. $node_type, COMMENT_ORDER_NEWEST_FIRST);
 
		$order = '';
		if ($display_order == COMMENT_ORDER_NEWEST_FIRST) {
			if ($sort_mode == COMMENT_MODE_FLAT_COLLAPSED || $sort_mode == COMMENT_MODE_FLAT_EXPANDED) {
				$order .= ' ORDER BY cid DESC';
			} else {
				$order .= ' ORDER BY thread DESC';
			}
		} else if ($display_order == COMMENT_ORDER_OLDEST_FIRST) {
			if ($sort_mode == COMMENT_MODE_FLAT_COLLAPSED || $sort_mode == COMMENT_MODE_FLAT_EXPANDED) {
				$order .= ' ORDER BY cid';
			} else {
				$order .= ' ORDER BY SUBSTRING(thread, 1, (LENGTH(thread) - 1))';
			}
		}
 
		$sql = sprintf("SELECT cid FROM {comments} WHERE nid=%d AND cid< =%d$order", $comment->nid, $comment->cid);
 
		$result = db_query("SELECT cid FROM {comments} WHERE nid=%d AND cid< =%d$order", $comment->nid, $comment->cid);
		$count = 0;
		while($row = db_fetch_object($result)) {
			if($row->cid == $comment->cid) {
				break;
			}
			$count++;
		}
 
		$page = floor($count / $cpp);
		$comments_pages[$comment->cid] = $page;
	}
 
	$query = ($page > 0) ? 'page=' . $page : '';
 
	$content .= "<div class=\"commentline\"><div class=\"newest\">". l(deletehtml($comment->comment), 'node/'. $comment->nid, array('fragment' => 'comment-'. $comment->cid, 'query' => $query, 'html' => TRUE)) .'<br />'. t('@time 之前', array('@time' => format_interval(time() - $comment->timestamp))) . "</div><div class=\"commenttime\">".t('@time 之前', array('@time' => format_interval(time() - $comment->timestamp)))."</div></div>";
}
$block['content'] = $content;

同样,也可以用下面现成的模版文件来实现同样的效果,用法很简单,把文件解压后,放到你的theme目录里即可。
点击下载comment-block模版文件

你可能还对下面的日志感兴趣:

相关标签: Development & Design and tagged , , .

发表评论

电子邮件地址不会被公开。 必填项已被标记为 *

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>