การทำ กระทู้ที่เกี่ยวข้อง [SMF]

เริ่มโดย Putter™, 18 มกราคม 2010, 05:10:38

หัวข้อก่อนหน้า - หัวข้อถัดไป

0 สมาชิก และ 1 ผู้มาเยือน กำลังดูหัวข้อนี้

Putter™

ถ้างงมันคืออะไร ก็ ตามรูปเลยครับ


ถ้ายัง งงๆ ก็ 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']) ? : (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'] > && $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'], 0128) . '...';
$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'], 0128) . '...';

// 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 .= ' &nbsp;<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' '.msg' $row['ID_LAST_MSG']) . '#new',
'link' => '<a href="' $scripturl '?topic=' $row['ID_TOPIC'] . ($row['numReplies'] == '.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$subjecttrue);

if (empty($ids))
return false;

// 10 should be okay
$ids array_slice($ids010);

$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($string0, -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($string0, -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 ทีครับ


จบแล้วครับ ขอให้สนุกกับการปรับแต่งนะครับ
[direct=https://hostings.ruk-com.in.th]Ruk-Com Hosting (IAAS)[/direct]
[direct=https://ruk-com.cloud]Ruk-Com Cloud (PAAS)[/direct]
รีวิวโฮสติ่ง Ruk-Com  จากสมาชิก THAISEO

ไม่พอใจยินดีคืนเงินเต็มจำนวนทุกบริการ

Reality

*You walk right into reality, While my heart's still wild and free.. 

[direct=http://midnightadventure.net]Midnight Adventure[/direct]

Putter™

[direct=https://hostings.ruk-com.in.th]Ruk-Com Hosting (IAAS)[/direct]
[direct=https://ruk-com.cloud]Ruk-Com Cloud (PAAS)[/direct]
รีวิวโฮสติ่ง Ruk-Com  จากสมาชิก THAISEO

ไม่พอใจยินดีคืนเงินเต็มจำนวนทุกบริการ

Reality

อ้างถึงจาก: putter ใน 18 มกราคม 2010, 14:08:35
ผมรักน้องโฟกัสครับ  :wanwan004: :wanwan004:
เห้ยไม่น่า + เลยวะ (มีกดลบไหมครับ)

คนนั้นแฟนผมครับ ขอร้องอย่าง :wanwan015:

:wanwan004: :wanwan004:
*You walk right into reality, While my heart's still wild and free.. 

[direct=http://midnightadventure.net]Midnight Adventure[/direct]

tonzatatay

วิทยายุทธยังล้ำเลิสเหมือนเดิม     :wanwan016:

tonzatatay

อ้างถึงจาก: tonzatatay ใน 18 มกราคม 2010, 14:14:25
วิทยายุทธยังล้ำเลิสเหมือนเดิม     :wanwan016:


ว่าแต่มันคืออะไรคับ เอา title มาทำเป็นลิ้งหลอ

honghong

อ้างถึงจาก: tonzatatay ใน 18 มกราคม 2010, 18:37:32
อ้างถึงจาก: tonzatatay ใน 18 มกราคม 2010, 14:14:25
วิทยายุทธยังล้ำเลิสเหมือนเดิม     :wanwan016:


ว่าแต่มันคืออะไรคับ เอา title มาทำเป็นลิ้งหลอ
มาช่วยตอบครับมันคือ
related topic
ง่ายก็คือกระทู้ที่เกี่ยวข้องครับ
มันจะให้เราเลือกได้ว่าจะให้บทความเกี่ยวข้องกี่บทความ
แล้วมาลงตรงที่บอร์คล่างสุดตามตัวอย่าง
เวลาคนอ่านบทความในบอร์คจบก็จะมีกระทู้ข่างเคียงมาครับ

เหมือนของwordpress ที่มีmod บทความที่เกี่ยวข้องน่ะครับ

popsiam


xaax

เสิร์ซหาข้อมูลใน Google มาเจอกระทู้นี้พอดี ขออภัยที่ต้องขุด แต่อยากจะบอกว่า ขอบคุณมากครับ  :wanwan017: