ถ้างงมันคืออะไร ก็ ตามรูปเลยครับ
(http://img709.imageshack.us/img709/3747/40166020.jpg) (http://smf.ruk-com.in.th/topic/4980-%E0%B9%82%E0%B8%9B%E0%B8%A3%E0%B9%81%E0%B8%81%E0%B8%A3%E0%B8%A1%E0%B8%A2%E0%B8%AD%E0%B8%94%E0%B8%99%E0%B8%B4%E0%B8%A2%E0%B8%A1%E0%B8%AA%E0%B8%B3%E0%B8%AB%E0%B8%A3%E0%B8%B1%E0%B8%9A-%E0%B8%9B%E0%B8%B5-2009-%28164-%E0%B9%82%E0%B8%9B%E0%B8%A3%E0%B9%81%E0%B8%81%E0%B8%A3%E0%B8%A1%29-%E0%B9%80%E0%B8%A5%E0%B8%B7%E0%B8%AD%E0%B8%81%E0%B9%82%E0%B8%AB%E0%B8%A5%E0%B8%94%E0%B9%84%E0%B8%94%E0%B9%89%E0%B9%80%E0%B8%A5%E0%B8%A2-!!!!.html)
ถ้ายัง งงๆ ก็ Click ที่รูป แล้วดูด้านล่างสุดเลยครับ
เพื่อไม่ให้เป็นการเสียเวลามาเริ่มกันเลยดีกว่าครับ
เปิดไฟล์ source/ModSettings.php
ค้นหา
'',
// Reactive on email, and approve on delete
เอาไว้ก่อนหน้าที่หา
'',
// Related Topics
array('check', 'relatedTopicsEnabled'),
array('int', 'relatedTopicsCount'),
array('select', 'relatedIndex', array('fulltext' => $txt['relatedFulltext'])),
เปิดไฟล์ source/RemoveTopic.php
ค้นหา
else
$condition = 'IN (' . implode(', ', $topics) . ')';
ขึ้นบรรทัดใหม่
// Added by Related Topics
require_once($sourcedir . '/Subs-Related.php');
removeRelated($topics);
// Related Topics END
เปิดไฟล์ source/Subs-Post.php
ค้นหา
$topicOptions['id'] = db_insert_id();
ขึ้นบรรทัดใหม่
// Added by Related Topics
global $sourcedir;
require_once($sourcedir . '/Subs-Related.php');
addRelated($topicOptions['id'], $msgOptions['subject']);
// Related Topics END
ค้นหา
updateStats('subject', $topicOptions['id'], $msgOptions['subject']);
mysql_free_result($request);
ขึ้นบรรทัดใหม่
// Added by Related Topics
global $sourcedir;
require_once($sourcedir . '/Subs-Related.php');
addRelated($topicOptions['id'], $msgOptions['subject']);
// Related Topics END
เปิดไฟล์ source/Display.php
ค้นหา
$topicinfo = mysql_fetch_assoc($request);
mysql_free_result($request);
ขึ้นบรรทัดใหม่
// Added by Related Topics
if (!empty($modSettings['relatedTopicsEnabled']))
{
require_once($sourcedir . '/Subs-Related.php');
$context['related_topics'] = loadRelated($topic);
}
เปิดไฟล์ theme/Display.template.php
ค้นหาประมาณนี้
echo '
<input type="hidden" name="sc" value="' . $context['session_id'] . '" />
<input type="hidden" name="seqnum" value="', $context['form_sequence_number'], '" />
</form>
</td>
</tr>
</table>';
}
ขึ้นบรรทัดใหม่
// Added by Related Topics
if (!empty($context['related_topics']) > 0)
{
echo '
<br />
<div class="tborder" ', $context['browser']['needs_size_fix'] && !$context['browser']['is_ie6'] ? 'style="width: 100%;"' : '', '>
<table border="0" width="100%" cellspacing="1" cellpadding="4" class="bordercolor">
<tr class="titlebg">
<td colspan="7">', $txt['related_topics'], '</td>
</tr>
<tr>
<td width="9%" colspan="2" class="catbg3"></td>
<td class="catbg3">', $txt[70],'</td>
<td class="catbg3">', $txt[109],'</td>
<td class="catbg3">', $txt[110],'</td>
<td class="catbg3">', $txt[301],'</td>
<td class="catbg3">', $txt[111],'</td>
</tr>';
foreach ($context['related_topics'] as $topic)
{
// Do we want to seperate the sticky and lock status out?
if (!empty($settings['seperate_sticky_lock']) && strpos($topic['class'], 'sticky') !== false)
$topic['class'] = substr($topic['class'], 0, strrpos($topic['class'], '_sticky'));
if (!empty($settings['seperate_sticky_lock']) && strpos($topic['class'], 'locked') !== false)
$topic['class'] = substr($topic['class'], 0, strrpos($topic['class'], '_locked'));
echo '
<tr>
<td class="windowbg2" valign="middle" align="center" width="5%">
<img src="', $settings['images_url'], '/topic/', $topic['class'], '.gif" alt="" />
</td>
<td class="windowbg2" valign="middle" align="center" width="4%">
<img src="', $topic['first_post']['icon_url'], '" alt="" />
</td>
<td class="windowbg' , !empty($settings['seperate_sticky_lock']) && $topic['is_sticky'] ? '3' : '' , '" valign="middle" ', (!empty($topic['quick_mod']['remove']) ? 'id="topic_' . $topic['first_post']['id'] . '" onmouseout="mouse_on_div = 0;" onmouseover="mouse_on_div = 1;" ondblclick="modify_topic(\'' . $topic['id'] . '\', \'' . $topic['first_post']['id'] . '\', \'' . $context['session_id'] . '\');"' : ''), '>';
if (!empty($settings['seperate_sticky_lock']))
echo '
' , $topic['is_locked'] ? '<img src="' . $settings['images_url'] . '/icons/quick_lock.gif" align="right" alt="" id="lockicon' . $topic['first_post']['id'] . '" style="margin: 0;" />' : '' , '
' , $topic['is_sticky'] ? '<img src="' . $settings['images_url'] . '/icons/show_sticky.gif" align="right" alt="" id="stickyicon' . $topic['first_post']['id'] . '" style="margin: 0;" />' : '';
echo '
', $topic['is_sticky'] ? '<b>' : '' , '<span id="msg_' . $topic['first_post']['id'] . '">', $topic['first_post']['link'], '</span>', $topic['is_sticky'] ? '</b>' : '';
// Is this topic new? (assuming they are logged in!)
if ($topic['new'] && $context['user']['is_logged'])
echo '
<a href="', $topic['new_href'], '" id="newicon' . $topic['first_post']['id'] . '"><img src="', $settings['images_url'], '/', $context['user']['language'], '/new.gif" alt="', $txt[302], '" /></a>';
echo '
<small id="pages' . $topic['first_post']['id'] . '">', $topic['pages'], '</small><br />
<small>', $topic['board_link'], '</small>
</td>
<td class="windowbg2" valign="middle" width="14%">
', $topic['first_post']['member']['link'], '
</td>
<td class="windowbg' , $topic['is_sticky'] ? '3' : '' , '" valign="middle" width="4%" align="center">
', $topic['replies'], '
</td>
<td class="windowbg' , $topic['is_sticky'] ? '3' : '' , '" valign="middle" width="4%" align="center">
', $topic['views'], '
</td>
<td class="windowbg2" valign="middle" width="22%">
<a href="', $topic['last_post']['href'], '"><img src="', $settings['images_url'], '/icons/last_post.gif" alt="', $txt[111], '" title="', $txt[111], '" style="float: right;" /></a>
<span class="smalltext">
', $topic['last_post']['time'], '<br />
', $txt[525], ' ', $topic['last_post']['member']['link'], '
</span>
</td>';
echo '
</tr>';
}
echo '
</table>
</div>';
}
เปิดไฟล์ index.php (หน้าแรก board/index.php)
ค้นหา
'register2' => array('Register.php', 'Register2'),
ขึ้นบรรทัดใหม่
'related' => array('Subs-Related.php', 'Related'),
เปิดไฟล์ language/Modifications.english.php และก็ Modifications.thai-utf8.php
เพิ่มไว้ก่อน ?>
// Added by Related Topics
$txt['admin_related_topic'] = 'กระทู้ที่เกี่ยวข้อง';
$txt['related_topics'] = 'กระทู้ที่เกี่ยวข้อง';
$txt['relatedTopicsEnabled'] = 'Enable Related Topics';
$txt['relatedTopicsCount'] = 'How many related topics to show';
$txt['relatedIndex'] = 'Indexing method<div class="smalltext"><b><a href="' . $scripturl . '?action=related;sa=index;begin">Build index</a></b></div>';
$txt['relatedFulltext'] = 'Fulltext';
$txt['relatedCustom'] = 'Custom';
เสร็จขั้นตอนการแก้ไขไฟล์
ต่อไปสร้างไฟล์ ไปไว้ใน Source/ นะครับ
ไฟล์แรกตั้งชื่อว่า Subs-Related.php
<?php
/**********************************************************************************
* Subs-Related.php *
***********************************************************************************
* This program is free software; you may redistribute it and/or modify it under *
* the terms of the provided license as published by Simple Machines LLC. *
* *
* This program is distributed in the hope that it is and will be useful, but *
* WITHOUT ANY WARRANTIES; without even any implied warranty of MERCHANTABILITY *
* or FITNESS FOR A PARTICULAR PURPOSE. *
* *
* See the "license.txt" file for details of the Simple Machines license. *
* The latest version can always be found at http://www.simplemachines.org. *
**********************************************************************************/
function Related()
{
global $scripturl, $txt, $db_prefix, $modSettings, $context;
global $user_info, $func;
isAllowedTo('admin_forum');
if (isset($_REQUEST['sa']) && $_REQUEST['sa'] == 'index')
{
buildTopicIndex();
}
}
// Build index
function buildTopicIndex()
{
global $scripturl, $txt, $db_prefix, $modSettings, $context, $sourcedir;
loadTemplate('Admin');
loadLanguage('Admin');
if (!isset($context['relatedClass']))
initRelated();
$context['start'] = empty($_REQUEST['start']) ? 0 : (int) $_REQUEST['start'];
if (isset($_REQUEST['begin']) || (!isset($_REQUEST['rel']) && $_REQUEST['start'] == 0))
{
$context['relatedClass']->recreateIndexTables();
db_query("DELETE FROM {$db_prefix}related_topics", __FILE__, __LINE__);
}
$request = db_query("
SELECT MAX(ID_TOPIC)
FROM {$db_prefix}topics", __FILE__, __LINE__);
list ($max_topics) = mysql_fetch_row($request);
mysql_free_result($request);
$last = $_REQUEST['start'] + 200;
$context['sub_template'] = 'not_done';
$context['continue_get_data'] = '?action=related;sa=index' . (isset($_REQUEST['rel']) ? ';rel' : '') . ';start=' . $last;
$context['continue_percent'] = round(100 * $_REQUEST['start'] / $max_topics);
$context['continue_post_data'] = '';
$request = db_query("
SELECT t.ID_TOPIC, mf.subject
FROM {$db_prefix}topics AS t
INNER JOIN {$db_prefix}messages AS mf ON (mf.ID_MSG = t.ID_FIRST_MSG)
WHERE t.ID_TOPIC > $context[start]
AND t.ID_TOPIC <= $last", __FILE__, __LINE__);
$topics = array();
while ($row = mysql_fetch_assoc($request))
{
if (!isset($_REQUEST['rel']))
$topics[] = array($row['ID_TOPIC'], $row['subject']);
else
createRelations($row['ID_TOPIC'], $row['subject']);
}
mysql_free_result($request);
if (!isset($_REQUEST['rel']))
addRelated($topics, '', true);
if ($last >= $max_topics)
{
if (!isset($_REQUEST['rel']))
$context['continue_get_data'] = '?action=related;sa=index;rel';
else
$context['continue_get_data'] = '?action=admin;area=modsettings;sa=related';
}
$context['continue_countdown'] = 5;
}
// Main funtions
function loadRelated($topic)
{
global $modSettings, $context, $db_prefix, $user_info;
$result = db_query("
SELECT IF(rt.id_topic_first = $topic, rt.id_topic_second, rt.id_topic_first) AS ID_TOPIC
FROM {$db_prefix}related_topics AS rt
JOIN {$db_prefix}topics AS t ON (t.ID_TOPIC = IF(rt.id_topic_first = $topic, rt.id_topic_second, rt.id_topic_first))
JOIN {$db_prefix}boards AS b ON (b.ID_BOARD = t.ID_BOARD)
WHERE (id_topic_first = $topic OR id_topic_second = $topic)
AND $user_info[query_see_board]
ORDER BY rt.score DESC
LIMIT $modSettings[relatedTopicsCount]", __FILE__, __LINE__);
if (mysql_num_rows($result) == 0)
return false;
$topics_ids = array();
while ($row = mysql_fetch_assoc($result))
$topics_ids[] = $row['ID_TOPIC'];
mysql_free_result($result);
return prepareTopicArray($topics_ids);
}
function prepareTopicArray($topics_ids)
{
global $scripturl, $txt, $db_prefix, $modSettings, $context, $settings;
global $options, $sourcedir, $user_info, $ID_MEMBER, $board_info, $func;
// Setup the default topic icons...
$stable_icons = array('xx', 'thumbup', 'thumbdown', 'exclamation', 'question', 'lamp', 'smiley', 'angry', 'cheesy', 'grin', 'sad', 'wink', 'moved', 'recycled', 'wireless');
$context['icon_sources'] = array();
foreach ($stable_icons as $icon)
$context['icon_sources'][$icon] = 'images_url';
if (empty($topics_ids))
return false;
$topics_ids = implode(',', $topics_ids);
$result = db_query("
SELECT
t.ID_TOPIC, t.numReplies, t.locked, t.numViews, t.isSticky, t.ID_POLL,
" . ($user_info['is_guest'] ? '0' : 'IFNULL(lt.ID_MSG, IFNULL(lmr.ID_MSG, -1)) + 1') . " AS new_from,
t.ID_LAST_MSG, ml.posterTime AS lastPosterTime, ml.ID_MSG_MODIFIED,
ml.subject AS lastSubject, ml.icon AS lastIcon, ml.posterName AS lastMemberName,
ml.ID_MEMBER AS lastID_MEMBER, IFNULL(meml.realName, ml.posterName) AS lastDisplayName,
t.ID_FIRST_MSG, mf.posterTime AS firstPosterTime,
mf.subject AS firstSubject, mf.icon AS firstIcon, mf.posterName AS firstMemberName,
mf.ID_MEMBER AS firstID_MEMBER, IFNULL(memf.realName, mf.posterName) AS firstDisplayName,
LEFT(ml.body, 384) AS lastBody, LEFT(mf.body, 384) AS firstBody, ml.smileysEnabled AS lastSmileys,
mf.smileysEnabled AS firstSmileys, b.ID_BOARD, b.name
FROM {$db_prefix}topics AS t
JOIN {$db_prefix}boards AS b ON (b.ID_BOARD = t.ID_BOARD)
JOIN {$db_prefix}messages AS ml ON (ml.ID_MSG = t.ID_LAST_MSG)
JOIN {$db_prefix}messages AS mf ON (mf.ID_MSG = t.ID_FIRST_MSG)
LEFT JOIN {$db_prefix}members AS meml ON (meml.ID_MEMBER = ml.ID_MEMBER)
LEFT JOIN {$db_prefix}members AS memf ON (memf.ID_MEMBER = mf.ID_MEMBER)" . ($user_info['is_guest'] ? '' : "
LEFT JOIN {$db_prefix}log_topics AS lt ON (lt.ID_TOPIC = t.ID_TOPIC AND lt.ID_MEMBER = $ID_MEMBER)
LEFT JOIN {$db_prefix}log_mark_read AS lmr ON (lmr.ID_BOARD = b.ID_BOARD AND lmr.ID_MEMBER = $ID_MEMBER)") . "
WHERE $user_info[query_see_board]
AND t.ID_TOPIC IN ($topics_ids)
LIMIT $modSettings[relatedTopicsCount]", __FILE__, __LINE__);
$return = array();
while ($row = mysql_fetch_assoc($result))
{
if ($row['ID_POLL'] > 0 && $modSettings['pollMode'] == '0')
continue;
// Limit them to 128 characters - do this FIRST because it's a lot of wasted censoring otherwise.
$row['firstBody'] = strip_tags(strtr(parse_bbc($row['firstBody'], $row['firstSmileys'], $row['ID_FIRST_MSG']), array('<br />' => '')));
if ($func['strlen']($row['firstBody']) > 128)
$row['firstBody'] = $func['substr']($row['firstBody'], 0, 128) . '...';
$row['lastBody'] = strip_tags(strtr(parse_bbc($row['lastBody'], $row['lastSmileys'], $row['ID_LAST_MSG']), array('<br />' => '')));
if ($func['strlen']($row['lastBody']) > 128)
$row['lastBody'] = $func['substr']($row['lastBody'], 0, 128) . '...';
// Censor the subject and message preview.
censorText($row['firstSubject']);
censorText($row['firstBody']);
// Don't censor them twice!
if ($row['ID_FIRST_MSG'] == $row['ID_LAST_MSG'])
{
$row['lastSubject'] = $row['firstSubject'];
$row['lastBody'] = $row['firstBody'];
}
else
{
censorText($row['lastSubject']);
censorText($row['lastBody']);
}
// Decide how many pages the topic should have.
$topic_length = $row['numReplies'] + 1;
if ($topic_length > $modSettings['defaultMaxMessages'])
{
$tmppages = array();
$tmpa = 1;
for ($tmpb = 0; $tmpb < $topic_length; $tmpb += $modSettings['defaultMaxMessages'])
{
$tmppages[] = '<a href="' . $scripturl . '?topic=' . $row['ID_TOPIC'] . '.' . $tmpb . '">' . $tmpa . '</a>';
$tmpa++;
}
// Show links to all the pages?
if (count($tmppages) <= 5)
$pages = '« ' . implode(' ', $tmppages);
// Or skip a few?
else
$pages = '« ' . $tmppages[0] . ' ' . $tmppages[1] . ' ... ' . $tmppages[count($tmppages) - 2] . ' ' . $tmppages[count($tmppages) - 1];
if (!empty($modSettings['enableAllMessages']) && $topic_length < $modSettings['enableAllMessages'])
$pages .= ' <a href="' . $scripturl . '?topic=' . $row['ID_TOPIC'] . '.0;all">' . $txt[190] . '</a>';
$pages .= ' »';
}
else
$pages = '';
// We need to check the topic icons exist...
if (empty($modSettings['messageIconChecks_disable']))
{
if (!isset($context['icon_sources'][$row['firstIcon']]))
$context['icon_sources'][$row['firstIcon']] = file_exists($settings['theme_dir'] . '/images/post/' . $row['firstIcon'] . '.gif') ? 'images_url' : 'default_images_url';
if (!isset($context['icon_sources'][$row['lastIcon']]))
$context['icon_sources'][$row['lastIcon']] = file_exists($settings['theme_dir'] . '/images/post/' . $row['lastIcon'] . '.gif') ? 'images_url' : 'default_images_url';
}
else
{
if (!isset($context['icon_sources'][$row['firstIcon']]))
$context['icon_sources'][$row['firstIcon']] = 'images_url';
if (!isset($context['icon_sources'][$row['lastIcon']]))
$context['icon_sources'][$row['lastIcon']] = 'images_url';
}
$return[$row['ID_TOPIC']] = array(
'id' => $row['ID_TOPIC'],
'board_link' => '<a href="' . $scripturl . '?board=' . $row['ID_BOARD'] . '.0">' . $row['name'] . '</a>',
'first_post' => array(
'id' => $row['ID_FIRST_MSG'],
'member' => array(
'username' => $row['firstMemberName'],
'name' => $row['firstDisplayName'],
'id' => $row['firstID_MEMBER'],
'href' => !empty($row['firstID_MEMBER']) ? $scripturl . '?action=profile;u=' . $row['firstID_MEMBER'] : '',
'link' => !empty($row['firstID_MEMBER']) ? '<a href="' . $scripturl . '?action=profile;u=' . $row['firstID_MEMBER'] . '" title="' . $txt[92] . ' ' . $row['firstDisplayName'] . '">' . $row['firstDisplayName'] . '</a>' : $row['firstDisplayName']
),
'time' => timeformat($row['firstPosterTime']),
'timestamp' => forum_time(true, $row['firstPosterTime']),
'subject' => $row['firstSubject'],
'preview' => $row['firstBody'],
'icon' => $row['firstIcon'],
'icon_url' => $settings[$context['icon_sources'][$row['firstIcon']]] . '/post/' . $row['firstIcon'] . '.gif',
'href' => $scripturl . '?topic=' . $row['ID_TOPIC'] . '.0',
'link' => '<a href="' . $scripturl . '?topic=' . $row['ID_TOPIC'] . '.0">' . $row['firstSubject'] . '</a>'
),
'last_post' => array(
'id' => $row['ID_LAST_MSG'],
'member' => array(
'username' => $row['lastMemberName'],
'name' => $row['lastDisplayName'],
'id' => $row['lastID_MEMBER'],
'href' => !empty($row['lastID_MEMBER']) ? $scripturl . '?action=profile;u=' . $row['lastID_MEMBER'] : '',
'link' => !empty($row['lastID_MEMBER']) ? '<a href="' . $scripturl . '?action=profile;u=' . $row['lastID_MEMBER'] . '">' . $row['lastDisplayName'] . '</a>' : $row['lastDisplayName']
),
'time' => timeformat($row['lastPosterTime']),
'timestamp' => forum_time(true, $row['lastPosterTime']),
'subject' => $row['lastSubject'],
'preview' => $row['lastBody'],
'icon' => $row['lastIcon'],
'icon_url' => $settings[$context['icon_sources'][$row['lastIcon']]] . '/post/' . $row['lastIcon'] . '.gif',
'href' => $scripturl . '?topic=' . $row['ID_TOPIC'] . ($row['numReplies'] == 0 ? '.0' : '.msg' . $row['ID_LAST_MSG']) . '#new',
'link' => '<a href="' . $scripturl . '?topic=' . $row['ID_TOPIC'] . ($row['numReplies'] == 0 ? '.0' : '.msg' . $row['ID_LAST_MSG']) . '#new">' . $row['lastSubject'] . '</a>'
),
'is_sticky' => !empty($modSettings['enableStickyTopics']) && !empty($row['isSticky']),
'is_locked' => !empty($row['locked']),
'is_poll' => $modSettings['pollMode'] == '1' && $row['ID_POLL'] > 0,
'is_hot' => $row['numReplies'] >= $modSettings['hotTopicPosts'],
'is_very_hot' => $row['numReplies'] >= $modSettings['hotTopicVeryPosts'],
'is_posted_in' => false,
'icon' => $row['firstIcon'],
'icon_url' => $settings[$context['icon_sources'][$row['firstIcon']]] . '/post/' . $row['firstIcon'] . '.gif',
'subject' => $row['firstSubject'],
'new' => $row['new_from'] <= $row['ID_MSG_MODIFIED'],
'new_from' => $row['new_from'],
'newtime' => $row['new_from'],
'new_href' => $scripturl . '?topic=' . $row['ID_TOPIC'] . '.msg' . $row['new_from'] . '#new',
'pages' => $pages,
'replies' => $row['numReplies'],
'views' => $row['numViews']
);
determineTopicClass($return[$row['ID_TOPIC']]);
}
mysql_free_result($result);
return $return;
}
// Helper functions
function initRelated()
{
global $context, $modSettings, $sourcedir;
if (isset($context['relatedClass']))
return;
$indexType = ucwords($modSettings['relatedIndex']);
$class = 'RelatedTopics' . $indexType;
require_once($sourcedir . '/Subs-Related' . $indexType . '.php');
$context['relatedClass'] = new $class;
}
// Search for related topics by subject
function searchRelated($id_topic, $subject, $score = false)
{
global $scripturl, $txt, $db_prefix, $modSettings, $context, $sourcedir;
global $user_info, $smfFunc, $sourcedir;
if (!isset($context['relatedClass']))
initRelated();
return $context['relatedClass']->searchRelated($id_topic, $subject, $score);
}
// Create / update relations
function createRelations($id_topic, $subject)
{
global $scripturl, $txt, $db_prefix, $modSettings, $context;
global $user_info;
$ids = searchRelated($id_topic, $subject, true);
if (empty($ids))
return false;
// 10 should be okay
$ids = array_slice($ids, 0, 10);
$string = '';
foreach ($ids as $id)
if ($id_topic != $id[0])
$string .= '
(' . min($id_topic, $id[0]) . ', ' . max($id_topic, $id[0]) . ', ' . $id[1] . '),';
if (empty($string))
return false;
$result = db_query("
INSERT IGNORE INTO {$db_prefix}related_topics
(id_topic_first, id_topic_second, score)
VALUES" . substr($string, 0, -1), __FILE__, __LINE__);
return true;
}
// Add new thread to cache
function addRelated($topics, $subject = '', $remove = false)
{
global $scripturl, $txt, $db_prefix, $modSettings, $context, $sourcedir;
global $user_info;
if (!isset($context['relatedClass']))
initRelated();
if (!$remove)
removeRelated($topics);
$context['relatedClass']->addToCache($topics, $subject);
if (!$remove)
{
if (is_array($topics))
{
foreach ($topics as $t)
createRelations($t[0], $t[1]);
}
else
{
createRelations($topics, $subject);
}
}
}
// Remove related
function removeRelated($topics)
{
global $txt, $db_prefix, $modSettings, $context, $sourcedir;
if (!isset($context['relatedClass']))
initRelated();
if (!is_array($topics))
$topics = array($topics);
if (empty($topics))
return true;
$context['relatedClass']->removeFromCache($topics);
$topics = implode(', ', $topics);
db_query("
DELETE FROM {$db_prefix}related_topics
WHERE id_topic_first IN($topics) OR id_topic_second IN ($topics)", __FILE__, __LINE__);
return true;
}
?>
ต่อไปตั้งชื่อว่า Subs-RelatedFulltext.php
<?php
/**********************************************************************************
* Subs-RelatedFulltext.php *
***********************************************************************************
* This program is free software; you may redistribute it and/or modify it under *
* the terms of the provided license as published by Simple Machines LLC. *
* *
* This program is distributed in the hope that it is and will be useful, but *
* WITHOUT ANY WARRANTIES; without even any implied warranty of MERCHANTABILITY *
* or FITNESS FOR A PARTICULAR PURPOSE. *
* *
* See the "license.txt" file for details of the Simple Machines license. *
* The latest version can always be found at http://www.simplemachines.org. *
**********************************************************************************/
class RelatedTopicsFulltext
{
function __construct()
{
}
function recreateIndexTables()
{
global $smcFunc, $db_prefix;
db_query("
DROP TABLE IF EXISTS {$db_prefix}related_subjects", __FILE__, __LINE__);
db_query("
CREATE TABLE IF NOT EXISTS {$db_prefix}related_subjects (
id_topic int(10) unsigned NOT NULL,
subject tinytext NOT NULL,
PRIMARY KEY (id_topic),
FULLTEXT KEY subject (subject)
)", __FILE__, __LINE__);
return true;
}
function addToCache($topics, $subject = '')
{
global $db_prefix;
if (!is_array($topics))
$topics = array(
array((int) $topics, $subject)
);
foreach ($topics as $topic)
{
$subject = mysql_real_escape_string($topic[1]);
db_query("
INSERT INTO {$db_prefix}related_subjects
(id_topic, subject)
VALUES
($topic[0], '$subject')", __FILE__, __LINE__);
}
return true;
}
function removeFromCache($topics)
{
global $db_prefix;
$topics = implode(', ', $topics);
db_query("
DELETE FROM {$db_prefix}related_subjects
WHERE ID_TOPIC IN($topics)", __FILE__, __LINE__);
return true;
}
function searchRelated($id_topic, $subject, $score = false)
{
global $db_prefix;
$subject = mysql_real_escape_string($subject);
$result = db_query("
SELECT rs.id_topic, MATCH(rs.subject) AGAINST('$subject') AS score
FROM {$db_prefix}related_subjects AS rs
WHERE MATCH(rs.subject) AGAINST('$subject')
ORDER BY MATCH(rs.subject) AGAINST('$subject') DESC", __FILE__, __LINE__);
$return = array();
while ($row = mysql_fetch_assoc($result))
{
if (!$score)
$return[] = $row['id_topic'];
else
$return[] = array($row['id_topic'], $row['score']);
}
mysql_free_result($result);
return $return;
}
}
?>
ไฟล์ทั้ง 2 อัพขึ้นไปไว้ที่ board/Source/ นะครับ
ต่อไปสร้างไฟล์ ชื่อ related_topics.php อัพไปไว้ที่เดียวกับ SSI.php
<?php
/*******************************************************************************
This is script for installing Related Topics
ATTENTION: If you are trying to INSTALL this package, please access
it directly, with a URL like the following:
http://www.yourdomain.tld/forum/related_topics.php (or similar.)
*******************************************************************************/
global $db_prefix;
// If SSI.php is in the same place as this file, and SMF isn't defined, this is being run standalone.
if (file_exists(dirname(__FILE__) . '/SSI.php') && !defined('SMF'))
require_once(dirname(__FILE__) . '/SSI.php');
// Hmm... no SSI.php and no SMF?
elseif (!defined('SMF'))
die('<b>Error:</b> Cannot install - please verify you put this in the same place as SMF\'s index.php.');
$overwrite_old_settings = false;
$mod_settings = array(
'relatedTopicsEnabled' => '1',
'relatedTopicsCount' => '5',
'relatedIndex' => 'fulltext'
);
// Turn the array defined above into a string of MySQL data.
$string = '';
foreach ($mod_settings as $k => $v)
$string .= '
(\'' . $k . '\', \'' . $v . '\'),';
// Sorted out the array defined above - now insert the data!
if ($string != '')
$result = db_query("
" . ($overwrite_old_settings ? 'REPLACE' : 'INSERT IGNORE') . " INTO {$db_prefix}settings
(variable, value)
VALUES" . substr($string, 0, -1), __FILE__, __LINE__);
// Uh-oh spaghetti-oh!
if ($result === false)
echo '<b>Error:</b> Database modifications failed!';
db_query("
CREATE TABLE IF NOT EXISTS {$db_prefix}related_topics (
id_topic_first int(10) unsigned NOT NULL,
id_topic_second int(10) unsigned NOT NULL,
score float unsigned NOT NULL,
PRIMARY KEY (id_topic_first, id_topic_second)
)", __FILE__, __LINE__);
?>
เสร็จแล้วเรียกไฟล์นี้เลยครับ เช่น http://localhost/board/related_topics.php
การตั้งต่าใช้งาน
ผู้ดูแล >> ส่วนปรับแต่งค่าการใช้งาน >>
- มองหา Enable Related Topics ติ๊กถูกเลย
- ส่วน How many related topics to show ใส่เท่าไรก็ได้ครับแนะนำ 5 ก็พอครับ
ต่อไปสิ่งที่ลืมไม่ได้เลย มองหา Build index ถ้าเจอแล้วก็ Click 1 ทีครับ
จบแล้วครับ ขอให้สนุกกับการปรับแต่งนะครับ
+ ให้นะ น้องรัก(เหรอ ?!) :wanwan016:
ผมรักน้องโฟกัสครับ :wanwan004: :wanwan004:
อ้างถึงจาก: putter ใน 18 มกราคม 2010, 14:08:35
ผมรักน้องโฟกัสครับ :wanwan004: :wanwan004:
เห้ยไม่น่า + เลยวะ (มีกดลบไหมครับ)
คนนั้นแฟนผมครับ ขอร้องอย่าง :wanwan015:
:wanwan004: :wanwan004:
วิทยายุทธยังล้ำเลิสเหมือนเดิม :wanwan016:
อ้างถึงจาก: tonzatatay ใน 18 มกราคม 2010, 14:14:25
วิทยายุทธยังล้ำเลิสเหมือนเดิม :wanwan016:
ว่าแต่มันคืออะไรคับ เอา title มาทำเป็นลิ้งหลอ
อ้างถึงจาก: tonzatatay ใน 18 มกราคม 2010, 18:37:32
อ้างถึงจาก: tonzatatay ใน 18 มกราคม 2010, 14:14:25
วิทยายุทธยังล้ำเลิสเหมือนเดิม :wanwan016:
ว่าแต่มันคืออะไรคับ เอา title มาทำเป็นลิ้งหลอ
มาช่วยตอบครับมันคือ
related topic
ง่ายก็คือกระทู้ที่เกี่ยวข้องครับ
มันจะให้เราเลือกได้ว่าจะให้บทความเกี่ยวข้องกี่บทความ
แล้วมาลงตรงที่บอร์คล่างสุดตามตัวอย่าง
เวลาคนอ่านบทความในบอร์คจบก็จะมีกระทู้ข่างเคียงมาครับ
เหมือนของwordpress ที่มีmod บทความที่เกี่ยวข้องน่ะครับ
ขอบคุณครับ
เสิร์ซหาข้อมูลใน Google มาเจอกระทู้นี้พอดี ขออภัยที่ต้องขุด แต่อยากจะบอกว่า ขอบคุณมากครับ :wanwan017: