PDA

View Full Version : Delete Duplicate Posts - Hướng dẩn xóa các bài viết trùng trong Vbb



ShineGhost
08-03-14, 05:50 PM
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_succ essfully');
}

}
// /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).


<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b> (<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>)



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:


<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b> (<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>)


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:


<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b> (<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>)



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.


<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b> (<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>)


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 <b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b> (<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>)


Nguồn : CungHoaNhip.Net