drupal提供的Trackback模組其實還不錯,他把trackback進來的ping作爲匿名用戶的comment顯示,但標註有trackback和ping的來源,trackback本來就是保存在自己日誌上的對別人的post的評價,所以說這樣顯示也十分合理。
Trackback模組本身其實沒有問題,唯一的問題只在於在於顯示時把trackback url做成了鏈接,而不是文字地址,於是常常我們去點那個trackback url,結果返回一個Miss URL,其實只要用右鍵複製快捷方式就可以了。
來說說我是怎麼把它改得更友好一點的:
思路:彈出一個小窗口顯示trackback url地址,用url傳遞地址參數
方法:
1.在template里加入彈出窗口的javascript
<!--
function MM_openBrWindow(theURL,winName,features) { //v2.0
window.open(theURL,winName,features);
}
//-->
</script>
2.寫一個簡單的tburl.aspx文件,用於接收和顯示彈出窗口(之所以用asp.net是因爲我對php並不熟)
<%@ Import Namespace="System" %><%@ Import Namespace="System" %>
<%@ Import Namespace="System.IO" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<html>
<head>
<title>trackback url</title>
<script language="C#" runat="server">
public string tburl;
private void Page_Load(object sender, System.EventArgs e)
{
if ( Request.QueryString["q"] != null )
tburl = HttpUtility.HtmlEncode(Request.QueryString["q"]);
}
</script>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<style type="text/css">
<!--
.style1 {font-size: x-small}
-->
</style>
</head>
<body>
<font class="style1">引用本文的 trackback 地址:</font>
<br /><input name='tb' style='font-size:10px;width:312px' onmouseover='this.select()' value=<%=tburl%>>
<input type='button' value='複製' style='font-size:10px' onclick=tb.focus();document.execCommand('COPY')>
</body>
</html>
3.在includes/common.inc里加入popuptrackback()方法,"主機地址"改爲存放tburl.aspx的地址,我的tburl.aspx的地址在:http://winisp.net/ericfish/blog/tburl.aspx
if ($url == $_GET['q']) {
if (isset($attributes['class'])) {
$attributes['class'] .= ' active';
}
else {
$attributes['class'] = 'active';
}
}
return "<a href=javascript:MM_openBrWindow('http://主機地址/tburl.aspx?q=". url($url, $query, $fragment, $absolute) ."". drupal_attributes($attributes) ."','AddNewMsg','width=400,height=30')>$text</a>";
}
4.在module/trackback.module裏調用popuptrackback()方法
將原來的:
function trackback_link($type, $node = 0, $main = 0) {
if ($type == 'system') {
menu('trackback', t('trackback'), trackback_page, 0, MENU_HIDE);
}
elseif ($type == "node") {
$link = l(t("trackback url"), "trackback/$node->nid");
if (!$main) {
$url = url("node/view/$node->nid");
$tb_url = url("trackback/$node->nid");
$link .= "/n<!--/n";
$link .= "<rdf:RDF xmlns:rdf=/"http://www.w3.org/1999/02/22-rdf-syntax-ns#/" xmlns:dc=/"http://purl.org/dc/elements/1.1//" xmlns:trackback=/"/n'>http://madskills.com/public/xml/rss/module/trackback//">/n";
$link .= "<rdf:Description rdf:about=/"$url/" dc:identifier=/"$url/" dc:title=/"$node->title/" trackback:ping=/"$tb_url/" />/n";
$link .= "</rdf:RDF>/n";
$link .= "-->/n";
}
return array($link);
}
}
換成:
if ($type == 'system') {
menu('trackback', t('trackback'), trackback_page, 0, MENU_HIDE);
}
elseif ($type == "node") {
if (!$main) {
if (!$node) {
$url = url("node/view/$node->nid");
$tb_url = url("trackback/$node->nid");
$link = l(t("trackback url"), "trackback/$node->nid");
$link .= "/n<!--/n";
$link .= "<rdf:RDF xmlns:rdf=/"http://www.w3.org/1999/02/22-rdf-syntax-ns#/" xmlns:dc=/"http://purl.org/dc/elements/1.1//" xmlns:trackback=/"/n'>http://madskills.com/public/xml/rss/module/trackback//">/n";
$link .= "<rdf:Description rdf:about=/"$url/" dc:identifier=/"$url/" dc:title=/"$node->title/" trackback:ping=/"$tb_url/" />/n";
$link .= "</rdf:RDF>/n";
$link .= "-->/n";
}
else {
$link = popuptrackback(t("trackback url"), "trackback/$node->nid");
}
}
else {
$link = popuptrackback(t("trackback url"), "trackback/$node->nid");
}
return array($link);
}
}
Done!