สวัสดีครับ
ครั้งนี้ผมมี Mod linkout เขียนเอง มาฝากผู้ใช้ SMF กันนะครับ โดยระบบ Linkout ก็เพื่อป้องกันลิ้งก์ไม่ให้ออกจากเว็บไซต์มากเกินไป
ตัวอย่างลิ้งจะเป็นแบบนี้นะครับ
http://www.yoursmf.com/link.php?ref=aHR0cDovL3d3dy50aGFpc2VvYm9hcmQuY29t
ส่วนวิธีทำนั้นไม่ยากครับ ก่อนอื่นเราต้องลบระบบลิ้งก์เก่าของ smf ออกก่อน โดยไปที่ Sources/Subs.php
หา
array(
'tag' => 'url',
'type' => 'unparsed_content',
'content' => '<a href="$1" target="_blank">$1</a>',
'validate' => create_function('&$tag, &$data, $disabled', '
$data = strtr($data, array(\'<br />\' => \'\'));
if (strpos($data, \'http://\') !== 0 && strpos($data, \'https://\') !== 0)
$data = \'http://\' . $data;
'),
),
array(
'tag' => 'url',
'type' => 'unparsed_equals',
'before' => '<a href="$1" target="_blank">',
'after' => '</a>',
'validate' => create_function('&$tag, &$data, $disabled', '
if (strpos($data, \'http://\') !== 0 && strpos($data, \'https://\') !== 0)
$data = \'http://\' . $data;
'),
'disallow_children' => array('email', 'ftp', 'url', 'iurl'),
'disabled_after' => ' ($1)',
),
และ
array(
'tag' => 'iurl',
'type' => 'unparsed_content',
'content' => '<a href="$1">$1</a>',
'validate' => create_function('&$tag, &$data, $disabled', '
$data = strtr($data, array(\'<br />\' => \'\'));
if (strpos($data, \'http://\') !== 0 && strpos($data, \'https://\') !== 0)
$data = \'http://\' . $data;
'),
),
array(
'tag' => 'iurl',
'type' => 'unparsed_equals',
'before' => '<a href="$1">',
'after' => '</a>',
'validate' => create_function('&$tag, &$data, $disabled', '
if (substr($data, 0, 1) == \'#\')
$data = \'#post_\' . substr($data, 1);
elseif (strpos($data, \'http://\') !== 0 && strpos($data, \'https://\') !== 0)
$data = \'http://\' . $data;
'),
'disallow_children' => array('email', 'ftp', 'url', 'iurl'),
'disabled_after' => ' ($1)',
),
ลบออกไปครับ
แล้วทีนี้ให้เราเพิ่ม function สำหรับทำ Linkout ไว้ที่ส่วนล่างสุดของไฟล์ (บน ?>)
function parseurl($url, $text) {
if(!$url && preg_match("/((https?|ftp|gopher|news|telnet|rtsp|mms|callto|bctp|thunder|synacast){1}:\/\/|www\.)[^\[\"']+/i", trim($text), $matches)) {
$url = $matches[0];
$length = 65;
if(strlen($url) > $length) {
$text = substr($url, 0, intval($length * 0.5)).' ... '.substr($url, - intval($length * 0.3));
}
if(!eregi("^https?://([a-z0-9]+\.)?{$_SERVER['HTTP_HOST']}(.*)",$url)){
$oldurl = $url;
$url = '/link.php?ref='.base64_encode($url);
$lout = 1;
}
return '<a href="'.$url.'"'.($lout ? ' class="linkout" rel="nofollow"' : '' ).' title="'.$oldurl.'" target="_blank">'.$text.'</a>';
} else {
$text = stripslashes($text);
$url = substr($url, 1);
if(substr(strtolower($url), 0, 4) == 'www.') {
$url = 'http://'.$url;
}
if(!eregi("^https?://([a-z0-9]+\.)?{$_SERVER['HTTP_HOST']}(.*)",$url)){
$oldurl = $url;
$url = '/link.php?ref='.base64_encode($url);
$lout = 1;
}
return '<a href="'.$url.'"'.($lout ? ' class="linkout" rel="nofollow"' : '' ).' title="'.$oldurl.'" target="_blank">'.$text.'</a>';
}
}
อ๋อ อันนี้ผมดัดแปลงมาจาก Discuz นะครับ
แล้วให้หา
if (isset($cache_key, $cache_t) && array_sum(explode(' ', microtime())) - array_sum(explode(' ', $cache_t)) > 0.05)
แล้วเพิ่ม
$message = preg_replace("/\[url(=((https?|ftp|gopher|news|telnet|rtsp|mms|callto|bctp|ed2k|thunder|synacast){1}:\/\/|www\.|mailto:)([^\s\[\"']+?))?\](.+?)\[\/url\]/ies", "parseurl('\\1', '\\5')", $message);
ไว้ด้านบนเป็นอันจบส่วนการแก้ไขไฟล์ครับ
ทีนี้ ก็ถึงส่วนของ link.php ให้ก็อบโค้ดส่วนนี้ไปใส่แล้วนำไปวางในส่วน public_html ได้เลยครับ
<?
if(!isset($_GET['ref'])){
die();
}
$url = htmlspecialchars(base64_decode($_GET['ref']));
?>
<html xmlns="http://www.w3.org/1999/xhtml">
<meta http-equiv="Content-Language" content="th">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="robots" content="noindex, nofollow" />
<title>Linkout</title>
<style type="text/css">
body{
font-family:Tahoma, Geneva, sans-serif;
}
a{
color:#00F;
}
.center{
text-align:center;
}
.text-go{
color:#008000;
}
.text-top{
font-size:12px;
}
</style>
<script language="javascript">
setTimeout('top.location.href="<?=$url?>"', 2500);
</script>
</head>
<body>
<div class="center">
<br />
<br />
<br />
<br />
<br />
<br />
<p><span class="text-top">ขณะนี้คุณกำลังที่จะเชื่อมต่อไปยังเว็บไซต์ภายนอก</span><br /><a href='<?=$url?>' rel="nofollow"><?=$url?></a></p>
<br />
<span class="text-go">เรากำลังพาท่านไปยังหน้าที่ต้องการ.. กรุณารอ! </span>
<br />
<br />
<br />
<span class="right">Copyright (c)
</div>
</body>
</html>
หน้านี้แต่ได้ตามสบายเลยครับ