Thông thường các bạn muốn xóa các chủ đề trùng lặp thì vào ACP => Maintenance => Update Counters => Delete Duplicate Threadsnhưng hầu như hiệu quả thấp. Hôm nay mình sẽ hướng dẩn các bạn cách xóa các bài viết trùng nhau bằng cách hack thêm một số câu lệnh cho vBulletin.

Bước 1:
mở file misc.php nằm theo đường dẩn {forums}/admincp/misc.php, tìm:
PHP Code:
print_form_header('misc', 'removedupe');

print_table_header($vbphrase['delete_duplicate_threads'], 2, 0);
print_description_row($vbphrase['note_duplicate_threads_have_same']);
print_input_row($vbphrase['number_of_threads_to_process_per_cycle'], 'perpage', 500);
print_submit_row($vbphrase['delete_duplicate_threads']);
Thêm vào bên dưới:

PHP Code:
// Delete Duplicate Posts



print_form_header('misc', 'removedupeposts');
print_table_header('Delete Duplicate Posts', 2, 0);
print_description_row('<strong>Note:</strong> Duplicate posts are posts that have the same title, post user name name, and post time within the same thread.');
print_input_row('Number of threads to process per cycle', 'perpage', 500);
print_submit_row('Delete Duplicate Posts');
// /Delete Duplicate Posts


Bước 2: Tạo một Function mới.
Vẫn trong misc.php tìm:
PHP Code:
// ###################### Start find lost users #######################





if ($_POST['do'] == 'lostusers')





Thêm vào bên trên:
PHP Code:
// Delete Duplicate Posts







// ###################### Start remove dupe posts #######################
if ($_REQUEST['do'] == 'removedupeposts')
{
if (empty(
$vbulletin->GPC['perpage']))
{
$vbulletin->GPC['perpage'] = 500;
}

$finishat = $vbulletin->GPC['startat'] + $vbulletin->GPC['perpage'];

echo
'<p>Removing duplicate posts</p>';

$posts = $db->query_read("
SELECT postid, post.title, post.threadid, post.username, post.dateline, thread.title as threadtitle
FROM "
. TABLE_PREFIX . "post as post
INNER JOIN "
. TABLE_PREFIX . "thread AS thread ON(thread.threadid = post.threadid)
WHERE postid >= "
. $vbulletin->GPC['startat'] . " AND
postid <
$finishat
ORDER BY postid
"
);

while (
$post = $db->fetch_array($posts))
{
$deleteposts = $db->query_read("
SELECT *
FROM "
. TABLE_PREFIX . "post
WHERE title = '"
. $db->escape_string($post['title']) . "' AND
threadid =
$post[threadid] AND
username = '"
. $db->escape_string($post['username']) . "' AND
dateline =
$post[dateline] AND
postid >
$post[postid]
"
);
while (
$deletepost = $db->fetch_array($deleteposts))
{
$postman =& datamanager_init('Post', $vbulletin, ERRTYPE_SILENT, 'threadpost');
$postman->set_existing($post);
$postman->delete();
unset(
$postman);

echo
"&nbsp;&nbsp;&nbsp; ".construct_phrase($vbphrase['delete_x'], $deletepost['postid'] . ' ' . $deletepost['title'])."<br />";
}

echo
construct_phrase($vbphrase['processing_x'], $post['postid'] . ' ' . iif(!empty($post['title']),$post['title'],$post['threadtitle']) ) . "<br />\n";
vbflush();
}

if (
$checkmore = $db->query_first("SELECT postid FROM " . TABLE_PREFIX . "post WHERE postid >= $finishat LIMIT 1"))
{
print_cp_redirect("misc.php?" . $vbulletin->session->vars['sessionurl'] . "do=removedupeposts&startat=$finishat&pp=" . $vbulletin->GPC['perpage']);
echo
"<p><a href=\"misc.php?" . $vbulletin->session->vars['sessionurl'] . "do=removedupeposts&amp;startat=$finishat&amp;pp=" . $vbulletin->GPC['perpage'] . "\">" . $vbphrase['click_here_to_continue_processing'] . "</a></p>";
}
else
{
define('CP_REDIRECT', 'misc.php');
print_stop_message('deleted_duplicate_threads_successfully');
}

}
// /Delete Duplicate Posts





Đến đây là Ok rồi. Lưu lại và vào ACP thử chức năng mới thôi!!!
vào ACP => Maintenance => Update Counters sẽ thấy một điều mới đó là nó có thêm chức năng Delete Duplicate Posts (Xem hình).

[Only registered and activated users can see links. ]


Chức năng cũng tương tự như Delete Duplicate Threads nhưng mà cơ chế hoạt động của nó sẽ hay hơn và hiệu quả hơn!!
VD như ta post 1 bài như bài này:

[Only registered and activated users can see links. ]

khi ta viết tiếp một bài khác có nội dung tương tự rồi nhấn gởi bài mới:

[Only registered and activated users can see links. ]


thì hệ thống sẽ thông báo cho chúng ta là bài này đã có rồi và sẽ được chuyển hướng ra ngoài.

[Only registered and activated users can see links. ]

Cách này còn một số hạn chế các bạn tự fix và bổ xung nha! Done tại đây!!
Hay thì thank phát [Only registered and activated users can see links. ]


Nguồn : CungHoaNhip.Net