• Welcome to ชมรมนิติกรองค์กรปกครองส่วนท้องถิ่น:เว็บไซท์อันดับ๑ของวงการท้องถิ่น.
Main Menu
Menu

Show posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Show posts Menu

Messages - admin

#46
 [SMF] ช่วยด้วย!! ลงมอด..จนบอร์ดเน่า!!
มีอีเมล์ร่อนมาถามเกี่ยวกับการลง มอด
ถามว่า บอร์ดลงมอดแบบตามปกติที่เคยลงมา แต่อยู่มาวันหนึ่ง ลองลงมอดตัวหนึ่งดู ชื่อ PrettyUrls ขั้นตอนลงก็เหมือนปกติทั่วไป แต่พอเสร็จแล้วปรากฏว่าบอร์ดเน่าคะ ทำยังไงดี?

อย่างที่เคยบอกเมื่อหลายบทความก่อนหน้านี้แล้วว่า มอดของ smf มีความยุ่งยากตอนลงตรงที่มันจะพยายามเขียนไฟล์ใหม่เพิ่มเข้าไป ซึ่งหากไฟล์นั้นๆ ไม่ได้เซตเป็น 777 ไว้ มอดก็ง่อยแดกเลย ทำอะไรไม่ได้ ทีนี้แต่ละมอดก็มีการเขียนไฟล์มากหรือน้อยไม่เหมือนกันอีก

เดาว่ามอดตัวก่อนๆที่ลงแล้วไม่มีปัญหา น่าจะเป็นมอดตัวไม่ใหญ่มากนัก และบังเอิญไฟล์ที่มอดตัวนั้นไปเกี่ยวข้องอาจจเป็นไฟล์ที่เซตเป็น 777 แล้ว

ส่วนมอด PrettyUrls ซึ่งเป็นมอดที่ค่อนข้างใหญ่ มีการเขียนไฟล์เยอะ จึงอาจเจอปัญหาเขียนไฟล์ลงไปไม่ได้บ้าง หรือเขียนลงไปแต่ไม่สมบูรณ์บ้าง เมื่อเป็นเช่นนี้ บอร์ดก็เน่าด้วยประการฉะนี้แล

วิธีแก้ไข
ไปเช็คดูว่าไฟล์ที่มอดพยายามเขียนเข้าไปใหม่เป็นไฟล์ไหนบ้าง เช็คดูไม่ยากครับ ไฟล์ที่ถูกแก้ไขล่าสุดมันจะเรียงลำดับและมีวันที่เวลาชัดเจน

เืมื่อรู้แล้วว่าเป็นไฟล์ไหนบ้าง ก็เอาไฟล์ใหม่ไปทับตัวเก่า ก็เท่านั้นเอง
อย่างมอด PrettyUrls ไฟล์ที่ถูกเขียนส่วนใหญ่เป็นไฟล์ในโฟลเดอร์ Sources ก็เอาตัวใหม่ไปทับตัวเก่า ..ก็เรียบร้อยแล้วครับ
#47
 [SMF] แก้ไขรูปแบบเวลาใน SMF


เวลาที่แสดงผลในเว็บบอร์ดของ SMF ในกระทู้รวม ค่าดีฟอลต์ หรือค่าเริ่มต้น จะอยู่ในรูปแบบนี้ครับ  กรกฎาคม 20, 2012, 08:03:49 AM

ทีนี้หากเราอยากจะเปลี่ยนแปลงรูปแบบ ให้เป็นแบบอื่นบ้าง เช่น อยากให้เป็น วันที่ 20 กรกฎาคม 2012, 08:03:49 น. ต้องทำอย่างไร ?

ทีนี้มีคำตอบครับ
ก่อนอื่นล็อกอินเข้าสู่ระบบ admin
เสร็จแล้วไปที่เมนู ปรับแต่งบอร์ด  > Featureds And Options.. > General (ทั่วไป)

เสร็จแล้วลองเลื่อนลงมาด้านล่างครับ
ตรง Default time format
เปลี่ยนข้อมูลในช่องใหม่ โดยลบอันเก่าทิ้ง ใส่อันนี้ลงไปแทน  วันที่ %e %B  %Y, %H:%M:%S น.
ค่าที่จะแสดงในเว็บบอร์ด คือ  วันที่ 20 กรกฎาคม 2012, 08:03:49 น.

แต่ถ้าอยากให้เดือนเป็นคำย่อ ก็เปลี่ยนจาก %B เป็น %b  เท่านี้ก็เรียบร้อยแล้วครับ

เล็กๆน้อยๆ แต่ก็อาจจะทำให้เว็บบอร์ดของคุณดูดีขึ้นมาได้
#48
 [SMF] สร้างหน้าพักสำหรับลิงค์ไปนอกเว็บ Redirectpage
ไปตามบอร์ดใหญ่ๆ เวลามีลิงค์ให้คลิกไปยังเว็บอื่น ก่อนไปถึงเว็บนั้นๆ เราจะเจอหน้าหนึ่งดักไว้ก่อนเสมอ และจะมีข้อความว่า ..
"คุณกำลังลิงค์ไปนอกเว็บยังเว็บไซต์ www.xxxx.com"
หรือบางเว็บอาจแอบแปะโฆษณาในหน้าตรงนี้ด้วยและอาจใช้ข้อความอย่างอื่น แต่ก็ใกล้เคียงแบบนี้
หน้านี้เรียกว่า "หน้าพัก" หรือ Redirect Page

หลายคนหรือแม้แต่ผมเองก็สงสัยว่ามันมีประโยชน์อะไรหรือไอ้หนักพักเนี่ยะ โคตรเกะกะลูกกะตา เวลาจะคลิกไปยังเว็บอื่นมันยังมาดักเรา 5-10 วินาที เสียเวลานะเว้ยเฮ้ย!!

ประโยชน์ของมันก็คือ เพื่อไม่ให้มี link ออกไปจากหน้ากระทู้โดยตรงเพื่อผลดีต่ออันดับใน google ดังนั้นการที่สมาชิกจะใช้วิธีใส่ลิ้งในลายเซ็นหรือทำลิ้งในกระทู้เพื่อหวังผล back link ก็จะไม่มีผลต่อ อันดับใน google เห็นประโยชน์ของมันแล้วใช่มั้ยครับ ถ้าเห็นว่าเข้าท่าดี งั้นมาลงมือทำกันเลยดีกว่า

วิธีทำมี 2 แบบให้เลือกครับ
วิธีแรก ง่ายๆเลยไปหามอดมาติดในบอร์ดซะ ตามลิงค์นี้เลย http://custom.simplemachines.org/mods/index.php?mod=2562
วิธีลงไม่ยุ่งยากเท่าไรคล้ายมอดอื่นๆทั่วไป มีหน้าสำหรับ settings ก็ลองไปเซตๆ ติ้งๆ ดู ผมไม่พูดถึงรายละเอียด

ส่วนอีกวิธีหนึ่ง สำหรับคนที่ไม่แฮปปี้กับการติดตั้งมอด เพราะต้องให้เราไป set chmod ไฟล์โน้นไฟล์นี้ให้เป็น 777 ยุ่งยากนัก ขอแบบเมนวลๆ
ทำตามวิธีนี้เลยครับ (อ้างอิงจาก thaiseoboard.com)

1. เปิดไฟล์ Sources/Subs.php มองหาโค๊ด
// If it wasn't changed, no copying or other boring stuff has to happen!
if ($data != substr($message, $last_pos, $pos - $last_pos + 1))
{
$message = substr($message, 0, $last_pos) . $data . substr($message, $pos + 1);
// Since we changed it, look again incase we added or removed a tag. But we don't want to skip any. 
  $old_pos = strlen($data) + $last_pos - 1;
  $pos = strpos($message, '[', $last_pos);
  $pos = $pos === false ? $old_pos : min($pos, $old_pos);
  }
}

จากนั้นเติมโค๊ดในบรรทัดถัดมา..
$_SERVER['svz']['go'] = '/go.php?';

$message = preg_replace(array('~\[direct\](.*?)\[/direct\]~','~\[direct\=(.*?)](.*?)\[/direct\]~'),array('$1%svz%2','$2%svz%2'),preg_replace_callback('~\(.*?)\[/url\]~',create_function('$m','$go=$_SERVER[\'svz\'][\'go\'];$v=@parse_url($m[1]);return (!preg_match(\'~^\'.$go.\'~\',$m[1])&&$_SERVER[\'HTTP_HOST\']!=$v[\'host\'])?\'[url=\'.$go.$m[1].\']\'.$m[2].\'%svz%1\':\'.\']\'.$m[2].\'\';'),preg_replace('~\[url\](.*?)\[/url\]~','$1',$message)));

$message = str_replace (array('%svz%1', '%svz%2'), array(' [pr]', ' [direct]'), $message);

สิ่งที่ต้องตระหนักให้มากๆคือไฟล์ go.php ต้องอ้างอิงพาธให้ถูกต้องนะครับ
อ้างอิงถูกต้องหรือไม่อยู่ที่คุณว่าจะเก็บไฟล์ go.php ไว้ที่ไหน
คำถามที่ตามมาคือไฟล์ go.php ควรมีอะไรบ้างในนั้น
อะ ผมยกไฟล์ go.php ให้เลยแบบนี้นะ

<html>
<head>
<meta http-equiv="Content-Language" content="th">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<div align="center">
<p>
<font color="#0000FF">
<a href='<?php echo $_REQUEST['url']; ?>' rel="nofollow"><?php echo $_REQUEST['url']; ?></a></span></font></p>
<script language="javascript"> //setTimeout('document.RedirectX.submit()', 1000); setTimeout('top.location.href="<?php echo $_REQUEST['url']; ?>"', 5000); </script>
<br>
<font color="#008000">เรากำลังพาท่านไปยังหน้าที่ต้องการ.. กรุณารอสักครู๋!</font> <br>
</div>
</body>
</html>

เสร็จแล้วครับ ลองเอาไปประยุกต์ใช้ดู ขัดข้องสงสัยประการใด ..โพสต์ถามได้นะครับ
#49
 [SMF] wwwRedirect ตัดมันออกไปได้ไหม?
วันนี้มีปัญหามาให้คบคิดกันและมีวิธีแก้ไขให้ด้วย

เวลาคลิกเมนู เว็บบอร์ด หรือ webboard หรือ forums หรือลิงค์มาที่เว็บบอร์ดซึ่งมาจากหน้าแรก หลังจากคลิกปุ๊บด้านบน url จะติดคำว่า wwwRedirect มาด้วย
เช่น http://xxxxx.com/webboardwwwRedirect   ปัญหานี้ดูผิวเผินก็ไม่มีอะไร เพราะเว็บก็ยังเข้าได้ปกติดี แต่ผู้เชี่ยวชาญบอกว่า ปัญหานี้อาจทำให้บางครั้งเข้าบอร์ดได้บ้าง ไม่ได้บ้าง และที่สำคัญมีปัญหากับเสิรชเอ็นจิ้น ทำให้พี่เขาหาเราไม่เจอซะงั้น

ปัญหานี้เกิดขึ้นเพราะอะไรผมไม่ทราบนะครับ แต่วิธีแก้ผมไปค้นเจอผู้โพสต์ไว้ใน thaiseoboard.com ว่า ให้เปิดไฟล์ 2 ไฟล์ คือ Setthings.php และ Setthings_bak.php

ในไฟล์ดังกล่านี้จะมีคำสั่งนี้อยู่ $boardurl="htttp://www.xxxxx.com/board";  ให้ลบคำว่า www. ทิ้งเท่านั้นปัญหาดังกล่าวก็หายครับ

ทำไมมันง่ายงี้ว่ะฮ่ะเฮ้ย
#50
 [MOD] แค่แปะลิงค์ของวีดีโอ..วีดีโอก็แสดง

วันนี้มาแนะนำ mod สักตัวเอาแบบสั้นๆ ง่ายๆ ได้ใจความ


สรรพคุณคือสำหรับโพสต์คลิป หรือวีดีโอ ไม่ว่าจะมาจากยูทูป หรือจากเจ้าอื่นๆ ก็ได้
เคยแนะนำมอดสำหรับโพสต์คลิปไปแล้ว แต่ตัวนั้นโพสต์คลิปจากยูทูปเท่านั้น
ตัวนี้เด็ดกว่านั้นครับ เพราะมันรองรับได้ทุกสัญชาติ และที่เด็กกว่าอีก นั่นคือ
วิธีโพสต์แสนง่ายมาก แค่เอาลิงค์ของคลิป หรือวีดิโอมาแปะไว้ช่องโพสต์กระทู้ มันก็จะทำการ Embed แสดงผลในรูปวีดีโอให้เราโดยอัตโนมัติเลยละครับ

รองรับ SMF ทุกเวอร์ชั่น !!
จงไปเสพ ณ บัดนาวเลย

http://custom.simplemachines.org/mods/index.php?mod=977
#51
 [SMF] เพิ่มพื้นที่กระทู้กว้างขึ้น ด้วยการดึงข้อมูลผู้ตั้ง/ผู้ตอบกระทู้ไว้ด้านบน
บอร์ดเกี่ยวกับการถ่ายรูป ส่วนใหญ่ต้องการโชว์ภาพใหญ่ๆ ดังนั้น จึงอยากจะเอาข้อมูลของคนตอบหรือคนตั้งกระทู้จากเดิมอยู่ด้านซ้าย
อยากย้ายไปด้านบนซะ ..ทำยังไงดี?


วันนี้ผมมีวิธีครับ
เปิดไฟล์ Themes/yourthemes/Display.template.php

ค้นหาคำสั่งนี้  // Show information about the poster of this message. เจอแล้วอย่าพึ่งทำอะไร
หาคำสั่งนี้ต่อเลย  // Show the post itself, finally!

ให้ลบคำสั่งตั้งแต่  // Show information about the poster of this message.  ลงมาจนถึง   // Show the post itself, finally! เลยครับ
แล้วเพิ่มคำสั่งนี้ไปแทนที่



    // Show information about the poster of this message.
echo '
<table width="100%" cellpadding="5" cellspacing="0" style="table-layout: fixed;">
<tr>
<td bgcolor="#444">';


    // Show avatars, images, etc.?
if (!empty($settings['show_user_images']) && empty($options['show_no_avatars']) && !empty($message['member']['avatar']['image']))
echo '
        <div class="profileINFO">', $message['member']['avatar']['image'],'<br>';
       
       
                // Show their personal text?
if (!empty($settings['show_blurb']) && $message['member']['blurb'] != '')
echo '
        ', $message['member']['blurb'], '<br />
        <br />';

// This shows the popular messaging icons.
echo '
        ', $message['member']['icq']['link'], '
        ', $message['member']['msn']['link'], '
        ', $message['member']['aim']['link'], '
        ', $message['member']['yim']['link'], '<br />';
       
            // Show the profile, website, email address, and personal message buttons.
if ($settings['show_profile_buttons'])
{
// Don't show the profile button if you're not allowed to view the profile.
if ($message['member']['can_view_profile'])
echo '
        <a href="', $message['member']['href'], '">', ($settings['use_image_buttons'] ? '<img src="' . $settings['images_url'] . '/icons/profile_sm.gif" alt="' . $txt[27] . '" title="' . $txt[27] . '" border="0" />' : $txt[27]), '</a>';

// Don't show an icon if they haven't specified a website.
if ($message['member']['website']['url'] != '')
echo '
        <a href="', $message['member']['website']['url'], '" title="' . $message['member']['website']['title'] . '" target="_blank">', ($settings['use_image_buttons'] ? '<img src="' . $settings['images_url'] . '/www_sm.gif" alt="' . $txt[515] . '" border="0" />' : $txt[515]), '</a>';

// Don't show the email address if they want it hidden.

if (empty($message['member']['hide_email']))
echo '
        <a href="mailto:', $message['member']['email'], '">', ($settings['use_image_buttons'] ? '<img src="' . $settings['images_url'] . '/email_sm.gif" alt="' . $txt[69] . '" title="' . $txt[69] . '" border="0" />' : $txt[69]), '</a>';

// Since we know this person isn't a guest, you *can* message them.

if ($context['can_send_pm'])
echo '
        <a href="', $scripturl, '?action=pm;sa=send;u=', $message['member']['id'], '" title="', $message['member']['online']['label'], '">', $settings['use_image_buttons'] ? '<img src="' . $settings['images_url'] . '/im_' . ($message['member']['online']['is_online'] ? 'on' : 'off') . '.gif" alt="' . $message['member']['online']['label'] . '" border="0" />' : $message['member']['online']['label'], '</a>';
       
       
}
       
        echo '</div> ';

echo '<div style="float:left;padding: 5px; 10px">';

echo'  <b>', $message['member']['link'], '</b>
    <div class="smalltext">';

// Show the member's custom title, if they have one.
if (isset($message['member']['title']) && $message['member']['title'] != '')
echo '
        ', $message['member']['title'], '<br />';

// Show the member's primary group (like 'Administrator') if they have one.
if (isset($message['member']['group']) && $message['member']['group'] != '')
echo '
        ', $message['member']['group'], '<br />';

// Don't show these things for guests.
if (!$message['member']['is_guest'])
{
// Show the post group if and only if they have no other group or the option is on, and they are in a post group.
if ((empty($settings['hide_post_group']) || $message['member']['group'] == '') && $message['member']['post_group'] != '')
echo '
        ', $message['member']['post_group'], '<br />';
echo '
        ', $message['member']['group_stars'], '<br />';

// Is karma display enabled?  Total or +/-?
if ($modSettings['karmaMode'] == '1')
echo '
        <br />
        ', $modSettings['karmaLabel'], ' ', $message['member']['karma']['good'] - $message['member']['karma']['bad'], '<br />';
elseif ($modSettings['karmaMode'] == '2')
echo '
        <br />
        ', $modSettings['karmaLabel'], ' +', $message['member']['karma']['good'], '/-', $message['member']['karma']['bad'], '<br />';

// Is this user allowed to modify this member's karma?
if ($message['member']['karma']['allow'])
echo '
        <a href="', $scripturl, '?action=modifykarma;sa=applaud;uid=', $message['member']['id'], ';topic=', $context['current_topic'], '.' . $context['start'], ';m=', $message['id'], ';sesc=', $context['session_id'], '">', $modSettings['karmaApplaudLabel'], '</a>
        <a href="', $scripturl, '?action=modifykarma;sa=smite;uid=', $message['member']['id'], ';topic=', $context['current_topic'], '.', $context['start'], ';m=', $message['id'], ';sesc=', $context['session_id'], '">', $modSettings['karmaSmiteLabel'], '</a><br />';

// Show online and offline buttons?
if (!empty($modSettings['onlineEnable']) && !$message['member']['is_guest'])
echo '
        ', $context['can_send_pm'] ? '<a href="' . $message['member']['online']['href'] . '" title="' . $message['member']['online']['label'] . '">' : '', $settings['use_image_buttons'] ? '<img src="' . $message['member']['online']['image_href'] . '" alt="' . $message['member']['online']['text'] . '" border="0" style="margin-top: 2px;" />' : $message['member']['online']['text'], $context['can_send_pm'] ? '</a>' : '', $settings['use_image_buttons'] ? '<span class="smalltext"> ' . $message['member']['online']['text'] . '</span>' : '', '<br /><br />';

// Show the member's gender icon?
if (!empty($settings['show_gender']) && $message['member']['gender']['image'] != '')
echo '
        ', $txt[231], ': ', $message['member']['gender']['image'], '<br />';

// Show how many posts they have made.
echo '
        ', $txt[26], ': ', $message['member']['posts'], '<br />
        <br />';

}
// Otherwise, show the guest's email.
elseif (empty($message['member']['hide_email']))
echo '
        <br />
        <br />
    <a href="mailto:', $message['member']['email'], '">', ($settings['use_image_buttons'] ? '<img src="' . $settings['images_url'] . '/email_sm.gif" alt="' . $txt[69] . '" title="' . $txt[69] . '" border="0" />' : $txt[69]), '</a>';

// Done with the information about the poster... on to the post itself.
echo '
    </div>
</td>
</tr>



<tr>
<td valign="top" width="100%" height="100%">
    <table width="100%" border="0"><tr>
        <td valign="middle"><a href="', $message['href'], '"><img src="', $message['icon_url'] . '" alt="" border="0" /></a></td>
        <td valign="middle">
            <div style="font-weight: bold;" id="subject_', $message['id'], '">
                <a href="', $message['href'], '">', $message['subject'], '</a>
            </div>';

// If this is the first post, (#0) just say when it was posted - otherwise give the reply #.
echo '
            <div class="smalltext">« <b>', !empty($message['counter']) ? $txt[146] . ' #' . $message['counter'] : '', ' ', $txt[30], ':</b> ', $message['time'], ' »</div></td>
        <td align="', !$context['right_to_left'] ? 'right' : 'left', '" valign="bottom" height="20" style="font-size: smaller;">';

// Can they reply? Have they turned on quick reply?
if ($context['can_reply'] && !empty($options['display_quick_reply']))
echo '
<a href="', $scripturl, '?action=post;quote=', $message['id'], ';topic=', $context['current_topic'], '.', $context['start'], ';num_replies=', $context['num_replies'], ';sesc=', $context['session_id'], '" onclick="doQuote(', $message['id'], ', \'', $context['session_id'], '\'); return false;">', $reply_button, '</a>';

// So... quick reply is off, but they *can* reply?
elseif ($context['can_reply'])
echo '
<a href="', $scripturl, '?action=post;quote=', $message['id'], ';topic=', $context['current_topic'], '.', $context['start'], ';num_replies=', $context['num_replies'], ';sesc=', $context['session_id'], '">', $reply_button, '</a>';

// Can the user modify the contents of this post?
if ($message['can_modify'])
echo '
<a href="', $scripturl, '?action=post;msg=', $message['id'], ';topic=', $context['current_topic'], '.', $context['start'], ';sesc=', $context['session_id'], '">', $modify_button, '</a>';

// How about... even... remove it entirely?!
if ($message['can_remove'])
echo '
<a href="', $scripturl, '?action=deletemsg;topic=', $context['current_topic'], '.', $context['start'], ';msg=', $message['id'], ';sesc=', $context['session_id'], '" onclick="return confirm(\'', $txt[154], '?\');">', $remove_button, '</a>';

// What about splitting it off the rest of the topic?
if ($context['can_split'])
echo '
<a href="', $scripturl, '?action=splittopics;topic=', $context['current_topic'], '.0;at=', $message['id'], '">', $split_button, '</a>';

// Can do some Thank You Post things :)
if ($message['thank_you_post']['post'] && !$message['thank_you_post']['locked'])
echo '
<a href="', $scripturl, '?action=thankyou;topic=', $context['current_topic'], '.0;msg=', $message['id'], '">', $thankyoupostpost_button, '</a>';

if ($message['thank_you_post']['lock'] && $message['thank_you_post']['isThankYouPost'])
echo '
<a href="', $scripturl, '?action=thankyoupostlock;topic=', $context['current_topic'], '.0;msg=', $message['id'], '">', $message['thank_you_post']['locked'] ? $thankyoupostopen_button : $thankyoupostlock_button, '</a>';

if ($message['thank_you_post']['delete'] && $message['thank_you_post']['isThankYouPost'])
echo '
<a href="', $scripturl, '?action=thankyoupostdelete;topic=', $context['current_topic'], '.0;msg=', $message['id'], ';sesc=', $context['session_id'], '" onclick="return confirm(\'', $txt['remove_thank_you_post'], '?\');">', $thankyoupostdelete_button, '</a>';

// Show a checkbox for quick moderation?
if (!empty($options['display_quick_mod']) && $options['display_quick_mod'] == 1 && $message['can_remove'])
echo '
            <input type="checkbox" name="msgs[]" value="', $message['id'], '" class="check" ', empty($settings['use_tabs']) ? 'onclick="document.getElementById(\'quickmodSubmit\').style.display = \'\';"' : '', ' />';

// Show the post itself, finally!



ที่เหลือก็ไปปรับแต่งให้สวยงามตามใจชอบนะครับ
พยายามจะอธิบายขั้นตอนการแต่งให้ละเอียด แต่กลัวอธิบายแล้วจะงงไปกันใหญ่
เลยเอาง่ายๆ งี้ละกันนะ :o
#52
 [SMF] ลงMODไม่ได้ทำไงดี?



หลายครั้งที่เวลาจะลงมอดตัวใหญ่ๆ มักพบปัญหาลงไม่สำเร็จ แต่ลงในเครื่องสำเร็จดี ทั้งนี้สาเหตุเป็นเพราะอันใดหรือ? ช่วยชี้แจงแถลงไขที
ครับ, ปัญหานี้เป็นกันบ่อย เป็นกันเยอะ เป็นกันมาก จนบางคนหนีไปจาก SMF เลยทีเดียวเีชียว แต่ยังไงก็หนีไม่พ้นหรอกครับ ไปหา CMS เจ้าอื่นก็จะเจอปัญหาอื่นอีกไปเรื่อยๆ  เราไม่สามารถหนีปัญหาได้หรอกครับ
ต้องสู้กับมัน!!

สาเหตุที่ลงmod บนโฮสท์จริงแล้วไม่ค่อยผ่าน สาเหตุหลักมาจากไฟล์หรือโฟลเดอร์ของเราไม่ได้ set permission ให้เป็น 777 หรือให้เป็น writeable นั่นเองครับ
คำถามตามมาทันที แล้วจะต้องไปเซตไฟล์ไหนบ้าง?

อันนี้ตอบไม่ได้เลยครับ เพราะปลั๊กอินแต่ละตัวมีการเขียนไฟล์ไม่เหมือนกัน ไม่เท่ากัน บางมอดต้องสร้างตารางขึ้นมาใหม่ หรือเพิ่มฟิลด์ไปในตารางเดิม ฯลฯ
จะให้มานั่งไล่เซตไฟล์ให้เป็น 777 ก็ไม่ไหว เพราะบางไฟล์เซตไม่ได้อีก เพราะถูกทางโฮสท์fixไว้ไม่ให้แก้ไขหรือลบบางไฟล์

แล้วงี้..ต้องทำไง?

วิธีแก้ไขคือ ลงมอดในเครื่องเราก่อนครับ
หลังจากลงเรียบร้อยแล้ว ก็ดูว่ามีการเขียนไปในไฟล์ไหนบ้าง เสร็จแล้วก็อัพไฟล์เหล่านั้นไปทับไฟล์เก่าบนโฮสท์จริง
หรือถ้ามีการสร้างตารางใหม่ด้วย เราก็ต้องเข้าไปสร้างตารางใหม่ โดยตั้งชื่อและสร้างฟิลด์ให้เหมือนในเครื่องเราเลยครับ

เพียงเท่านี้เราก็สามารถ install มอดใหญ่ได้อย่างไม่มีปัญหา (ถึงแม้ว่าจะยุ่งยากไปนิดก็ตาม!!)
#53
 [SMF] ปัญหาระหว่างอัพเกรดเวอร์ชั่นของ SMF จากเวอร์ชั่น 1 สู่เวอร์ชั่น 2


เว็บบอร์ด smf ที่ใช้กันมานานแล้ว ส่วนใหญ่ก็จะใช้เวอร์ชั่น 1 กัน ทีนีพอ smf ออกเวอร์ชั่นใหม่มา นั่นคือเวอร์ชั่น 2 หลายๆคนก็อยากจะใช้เวอร์ชั่น 2 บ้าง
แต่ก็ยังลังเลไม่กล้าอัพเกรด เพราะเกรงว่าข้อมูลในบอร์ดทั้งหมด ไม่ว่าจะเป็นรายชื่อสมาชิก หรือกระทู้ต่างๆนานามากมายจะอันตรธานหายไปในระหว่างการเปลี่ยนเวอร์ชั่น!!

เรื่องนี้เป็นสิ่งที่น่ากลัวครับ แต่เราก็สามารถขจัดความกลัวได้ ด้วยการแบกอัพข้อมูลก่อนอัพเกรด

แต่วันนี้จะมาแชร์ปัญหาที่เกิดขึ้นระหว่างอัพเกรด
หากเราอัพโหลดไฟล์ upgrade ขึ้นไปเรียบร้อยแล้ว นาทีนี้เราจะถอยหลังไม่ได้แล้ว ต้องเดินหน้าอัพเกรดอย่างเดียว
พออัพโหลดไฟล์เสร็จสรรพ เรียกหาไฟล์ upgrade.php ผ่านบราวเซอร์ ..ความระทึกใจอยู่ตรงนี้แหละครับ

หากเรียกแล้วมันขึ้นมาด้วยหน้าตาปกติ ดูดี ..เราก็หายใจทั่วท้อง มั่นใจได้ว่า การอัพเกรดครั้งนี้ต้องผ่านไปได้ด้วยดีอย่างแน่นอน !!

แต่ถ้าเรียกไฟล์ upgrade.php ผ่านบราวเซอร์ปุ๊บ หน้าตามันดูเอ่อๆ ผิดปกติ แถมยังมีแจ้งเอ่อเร่อแจ้งบรรทัดที่ผิดด้วย โอ้ย ตาย เราจะแก้ปัญหายังไงดี!!

ปัญหานี้เกิดขึ้นเพราะไฟล์ที่เราอัพโหลดไปนั้น ไม่สมบูรณ์!!
ทั้งๆที่เรามั่นใจว่าเราอัพโหลดไฟล์ไปทับไฟล์เก่าเรียบร้อยหมดแล้วนะ แต่ทำไม ถึงบอกว่าไม่สมบูรณ์

อย่างนี้ครับ ไฟล์บางไฟล์ถูกห้ามไม่ให้ลบหรือทับ ดังนั้น มันจึงยังคงเป็นไฟล์เก่าอยู่ พอเป็นไฟล์เก่า การอัพเกรดก็ไม่ผ่่าน!!

การแก้ปัญหาคือ ให้พยายามลบไฟล์นั้นให้ได้ครับ แต่ถ้าพยายามจนสุดความสามารถแล้วยังลบไม่ได้ ก็ให้ไปเปลี่ยนชื่อไฟล์ หรือโฟลเดอร์นั่นซะ แล้วค่อยอัพไฟล์ใหม่เข้าไปแทน

ทีนี้ ..ก็ค่อยทำการอัพเกรดต่อไป รับรองผ่าน ฉลุย !!
#54
 [SMF] วิธีทำกระทู้แนะนำในเว็บบอร์ด

อ้างอิงจากกระทู้นี้ http://forum.ubuntuclub.com/forum?topic=8915 ของ Ubuntuclub Forum  ครับ
เห็นว่าน่าสนใจดีเลยขออนุญาตนำมาเผยแพร่ต่อเผื่อให้ท่านที่สนใจ

กระทู้ที่อ้างอิงด้านบนนั่นกล่าวถึงการ "กระทู้แนะนำ" หรือกระทู้โหวต ซึ่งสามารถเขียนให้สมาชิกโหวต หรือเฉพาะแอดมินเท่านั้นที่โหวตก็ได้
แต่จากตัวอย่างลิงค์ด้านบน อนุญาตให้สมาชิกเท่านั้นโหวต  เพื่อให้กระทู้ขึ้นในหมวดกระทู้แนะนำ

ความจริงจะบอกว่าเป็นกระทู้โหวตก็ไม่ใคร่ถูกนัก เป็นเพียงการอนุญาตให้สมาชิกคลิกเลือกกระทู้ให้ไปอยู่ในหมวด "กระทู้แนะนำ" ซึ่งจะอยู่บนสุด แขกใครไปไหนมาไหนก็จะเห็นเด่นเป็นสง่า
ผมจะไม่เขียนอะไรเพิ่มเติมในระบบที่ทาง Ubuntuclub Forum  เขียนไว้แล้วนะครับ
แค่จะแนะนำวิธีใช้งานเท่านั้นเอง (ในลิงค์ดังกล่าวแนะนำการใช้งานไว้สำหรับทั้งเวอร์ชั่น 1 และเวอร์ชั่น 2 แต่ในที่นี้ผมจะขอพูดถึงเฉพาะเวอร์ชั่น 2 เท่านั้นนะครับ)

ถ้าท่านยังคิดภาพกระทู้แนะนำไม่ออก ..ก็ขอให้คิดถึงภาพเว็บบอร์ดที่มีกระทู้เรียงกันเป็นลำดับ แต่ด้านบนสุดของกระทู้ที่เรียงเป็นลำดับนั้น มีกล่องสี่เหลี่ยมตกแต่งสวยงาม ซึ่งในกล่องนั้นปรากฏกระทู้, ผู้ตั้งกระทู้, วันเวลาที่ตั้งกระทู้ ฯลฯ แล้วแต่จะหยิบนำอะไรมาแสดง ไม่เรียงลำดับ ไม่ใช่กระทู้ปักหมุด แต่เป็นกระทู้แนะนำ (ตามภาพ)

คล้ายๆ กระทู้ล่าสุด แต่การเลือกกระทู้มาแสดงเกิดจากการเลือก ไม่ใช่เลือกกระทู้ล่าสุดมาแสดง ข้อดีคือจะสามารถขุดเอากระทู้เก่าๆ แต่ยังมีประโชยน์และอยากให้โชว์อยู่ขึ้นมาแสดงในหน้าแรกได้

มาดูการนำไปใช้งานเลยดีกว่านะครับ
ไฟล์ที่เกี่ยวข้องมี 3 ไฟล์ และ 1 ใน 3 ไฟล์นั้นต้องสร้างขึ้นมาใหม่
1. Display.template.php // เพิ่มปุ่มโหวต หรือปุ่มเลือกกระทู้ในไฟล์นี้
2. BoardIndex.template.php //  สำหรับแสดงกระทู้โหวต และ
3. voterec.php // สำหรับโหวตหรือเลือกกระทู้

ไฟล์  Display.template.php ค้นหาคำว่า
  if (!$message['approved'] && $message['member']['id'] != 0 && $message['member']['id'] == $context['user']['id'])
   echo '
        <div class="approve_post">
         ', $txt['post_awaiting_approval'], '
        </div>';

พบแล้ววางคำสั่งด้านล่างนี้ต่อท้ายไป                             
      if(empty($message['counter']))
      echo '
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.js"></script>
<script type="text/javascript">
function voterec(id, ele){
   $(ele).unbind("click")
   $(".whs-rec-desc").html("โปรดรอ...")
   $.get("',$settings['theme_url'],'/voterec?act=vote&id="+id, {}, function(d){
      if(d!="OK")
         $(".whs-rec-desc").html(d)
      else
         $(".whs-rec-desc").html("โหวตเรียบร้อยแล้วครับ :)")
   })
}
</script>
                  <div class="whs-rec" style="float: right; text-align: center; font-size: 9pt;">
                     <a href="javascript:ubuntuclub();" onclick="voterec(',$context['current_topic'],', this); return false;">
                        <img src="',$settings['default_theme_url'],'/images/recommend.png" />
                     </a>
                     <div class="whs-rec-desc" style="margin-top: -20px;">
                        โหวตกระทู้นี้ ห้เป็นกระทู้แนะนำ
                     </div>
                  </div>';   
               
ไฟล์ BoardIndex.template.php ให้ค้นหาคำว่า
/* Each category in categories is made up of:
id, href, link, name, is_collapsed (is it collapsed?), can_collapse (is it okay if it is?),
new (is it new?), collapse_href (href to collapse/expand), collapse_image (up/down image),
and boards. (see below.) */

    พบแล้วให้วางโค๊ดด้านล่างนี้ด้านบน ..

       // WHS's Mod -> Recommend Topic
   print <<<WHSDOC
   <div class="tborder marginbottom categoryframe">
      <h3 class="catbg headerpadding">กระทู้แนะนำ</h3>
      <table cellspacing="1" class="bordercolor boardsframe">
         <tr>
            <td class="windowbg icon"><img src="{$settings['default_theme_url']}/images/recommend.png" alt="กระทู้แนะนำ" border="0" /><div style="margin-top: -20px;">กระทู้แนะนำ</div></td>
            <td class="windowbg"><iframe src="/voterec?act=view" style="width:100%; border: none;"></iframe></td>
         </tr>
      </table>
   </div>
WHSDOC;         

และสุดท้ายสร้างสร้างไฟล์ voterec.php และวางชุดคำสั่งนี้ลงไป

<?php
include "smf/SSI.php";
// no trespasser!
if($context['user']['is_guest']){
   die('ต้องสมัครสมาชิกก่อนทำการโหวตครับ');
}
function boardName($bid){
   global $smcFunc;
   $req = $smcFunc['db_query']('', "
      SELECT name
      FROM {db_prefix}boards
      WHERE id_board = {int:bid}
      LIMIT 1
   ", array(
      'bid' => $bid,
   ));
   $row = $smcFunc['db_fetch_row']($req);
   return $row[0];
}
// yeah, I cheat.
// this using the [t=..] by the DtTvB :) ported to SMF 2's
// Get topic title from Zone-IT, with member color link!
function ubuntuclub_topic($message){
   global $smcFunc, $memberContext, $txt, $scripturl;
   $req = $smcFunc['db_query']('', "
      SELECT subject, id_member, id_board, id_topic
      FROM {db_prefix}messages
      WHERE id_topic = {int:idt}
      ORDER BY id_msg ASC LIMIT 1
   ", array(
      'idt' => $message,
   ));
   $row = $smcFunc['db_fetch_row']($req);
   if($row[1] != 0){
      // I don't reinvent the wheel, I'm lazy. I know this is slow but since we use iframe that doesn't matter.
      loadMemberData($row[1], false, 'minimal');
      @loadMemberContext($row[1]); // SHUT UP!
      $member = $memberContext[$row[1]]['link'];
   }else{
      $member = $txt['guest_title']; //I'm Fedora's l10n team after all.
   }
   // get the board's name!
   $bn = boardName($row[2]);
   return array($row[0], $member, "<a href='{$scripturl}/board,{$row[2]}.0.html'>$bn</a>");
}
if($_GET['act'] == "vote"){
   $topic = $_GET['id'];
   // is that thing really, exists?
   if (!ubuntuclub_topic($topic)){
      $smcFunc['db_free_result']($request);
      die("ไม่พบกระทู้ที่เรียก");
   }
   $smcFunc['db_free_result']($request);
   // well, so now it's exists. Just inject that into the table
   // but we need to know how much vote does it having?
   $request = $smcFunc['db_query']('', '
      SELECT * FROM {db_prefix}recommend WHERE ID_TOPIC = {int:idt}
   ', array(
      'idt' => $topic
   ));
   // hmm, PHP's DBAPI is clearly a mess, python's DBAPI is really simple
   $recommend = $smcFunc['db_fetch_row']($request);
   $smcFunc['db_free_result']($request);
   if(!$recommend){
      $request = $smcFunc['db_query']('', '
         INSERT INTO {db_prefix}recommend VALUES ({int:idt}, 1, "'.$context['user']['id'].'")
      ', array(
         'idt' => $topic
      ));
      die("OK");
   }else{
      // PHP showing it's suckness again, I think context.user.id in recommend[2].split(",") is more readable
      if(in_array($context['user']['id'], split(",", $recommend[2]))){
         die("คุณโหวตไปแล้ว");
      }
      $recommend[2] .= ",".$context['user']['id'];
      $recommend[1] += 1;
      // commit!
      $request = $smcFunc['db_query']('', '
         UPDATE {db_prefix}recommend SET count = {int:count}, voters = "'.$recommend[2].'"
         WHERE ID_TOPIC = {int:idt}
      ', array(
         'idt' => $topic,
         'count' => $recommend[1]
      ));
      die("OK");
   }
}else if($_GET['act'] == "view"){
   $req = $smcFunc['db_query']('', "
      SELECT ID_TOPIC FROM {db_prefix}recommend
      ORDER BY count DESC LIMIT 5
   ", array());
   while($row = $smcFunc['db_fetch_row']($req)){
      $tt = ubuntuclub_topic($row[0]);
      // hard coding to prevent beggars to use this
      print "<div><a href='$scripturl/topic,{$row[0]}.0.html' target='_parent'>{$tt[0]}</a> {$txt['started_by']} {$tt[1]} {$txt['in']} {$tt[2]}</div>";
   }
}

เซฟไว้ในโฟล์เดอร์ธีมของเรา
สุดท้ายต้องไปสร้างตารางไว้ในฐานข้อมูลด้วยครัับ

CREATE TABLE `smf_recommend` (
  `ID_TOPIC` int(11) NOT NULL,
  `count` int(11) NOT NULL default '0',
  `voters` longtext NOT NULL,
  PRIMARY KEY  (`ID_TOPIC`),
  KEY `count` (`count`)
)

ทั้งหมดนี้ผมเอาโค๊ดจากลิงค์ที่อ้างอิงด้านบนมา โดยไม่ได้ปรับแต่งหรือแก้ไขแต่อย่างใด ทั้งนี้เพื่อให้เครดิตแก่ผู้เขียนครับ
แต่ถ้าจะเอาไปใช้งานจริงก็ลองปรับดูให้เข้ากับบอร์ดของเรา จะให้สมาชิกสามารถโหวตได้ด้วย หรือให้เฉพาะแอดมินเท่านั้นโหวตก็ไปลองปรับกันใช้ดูครับ

#55
 [SMF] ฟังก์ชั่นแสดงกระทู้ล่าสุดอย่างเดียว ไม่แสดงกระทู้ตอบ
หลายวันก่อน มีน้องคนหนึ่งร่อนอีเมล์มาถามว่า
กำลังทำบอร์ดอยู่เหมือนกัน แต่อยากทราบว่า กระทู้ล่าสุดในบอร์ดทำยังไงถึงจะให้แสดงเฉพาะกระทู้ล่าสุดจริงๆ ไม่แสดงกระทู้อัพเดทที่มีคำว่า Re: นำหน้า

น้องเค้ากลัวผมไม่เข้าใจก็เลยส่งภาพมาให้ดูต่างหน้าด้วย


วิธีทำก็ไม่ซับซ้อนอะไร เอาให้ง่ายๆ เข้าใจง่ายๆ
ฟังก์ชั่นที่ทางระบบ smf ทำไว้แล้วนั้น เราจะไม่ไปแตะต้อง เราเขียนฟังก์ชั่นขึ้นมาใหม่เลยก็แล้วกัน

ดังนี้ครับ

  function recentTopics($num=20)
  {
      global $context, $settings, $db_prefix, $txt, $scripturl, $user_info, $modSettings,$smcFunc;

          $request1=$smcFunc['db_query']('','SELECT t.id_topic,m.body,m.subject,mb.member_name
          FROM ({db_prefix}topics as t , {db_prefix}messages as m,{db_prefix}members as mb)
          WHERE t.id_first_msg=m.id_msg AND m.id_member=mb.id_member
          ORDER BY t.id_topic DESC
          LIMIT {int:num}',
          array( 'num'=>$num,
  )  );


  echo "<ul>";
  while ($row = mysql_fetch_assoc($request1))
  {

  echo '<li><a href="/smf/?topic='.$row['id_topic'].'">'.$row['subject'].' </a> โดย '.$row['member_name'].' </li>';

}
echo "</ul>";

  mysql_free_result($request1);

}

การนำไปใช้

ก็นำฟังก์ชั่นนี้ไปทิ้งไว้ในไฟล์ index.template.php
ไปใส่ด้านล่างสุดเลยก็ได้ครับ แต่ต้องอยู่ภายในเครื่องหมาย ? >

จากนั้น หาตำแหน่งเหมาะที่อยากให้กระทู้ล่าสุดโชว์ ใส่คำสั่งนี้ไป <?php recentTopics();?>
อยากให้แสดงจำนวนเท่าไร ก็ใส่ตัวเลขในเครื่องหมายวงเล็บไปเท่านั้น

เช่น  recentTopics(10);

ก็จะแสดงจำนวนกระทู้ทั้งหมด 10 กระทู้

ฟังก์ชั่นนี้ผมพึ่งเขียนขึ้นแบบง่ายๆ ดังนั้นเลยไม่ได้ตกแต่งให้สวยงาม ถ้าจะนำไปใช้ก็ตกแต่งด้วย css นิดหน่อยก็สวยงามอร่ามตาแล้วละครับ

ก็ประมาณนี้นะครับ ลองเอาไปปรับใช้ดู
ติดขัดตรงไหนก็สอบถามได้ครับ ยินดีถ้าช่วยได้ก็ช่วยเต็มที่
#56
 [SMF] ข้อควรระวังหลังจาก Upgrade SMF เวอร์ชั่นใหม่
สำหรับนักพัฒนาหรือใช้งานบอร์ด smf แล้ว สิ่งหนึ่งที่จะต้องเจอหรือทำอยู่เรื่อยๆ คือ การอัพเกรดเวอร์ชั่น เพราะ smf เองได้พัฒนาเวอร์ชั่นมาโดยตลอดอย่างไม่หยุดยั้ง ล่าสุด คือ เวอร์ชั่น 2.02
การอัพเกรดเวอร์ชั่นทำได้อย่างง่ายมาก คือ สามารถทำออนไลน์โดยล็อกอินเข้าสู่ระบบล็อกอิน และเลือกเมนูปรับปรุงเวอร์ชั่น ดูเหมือนจะง่าย แต่เอาเข้าจริงก็ไม่ได้ง่า่ยอย่างนั้นเท่าไร เพราะการอัพเกรดเวอร์ชั่นของ smf
ระบบจะทำการเขียนคำสั่งใหม่ลงไปในตัวไฟล์ .php หลายๆไฟล์ ถ้ามีไฟล์ไหนหรือโฟลเดอร์ไหนไม่ได้เซตให้เป็น 777 ระบบก็จะไม่สามารถเขียนลงไปได้ เกิดปัญหาเออเร่อทันที !!

ดังนั้น เลือกวิธีอัพเกรดแบบ Manual ดีกว่าครับ
ไปดาวน์โหลดไฟล์อัพเกรดมา แล้วอัพไฟล์ดังกล่าวไปทับตัวเดิมเสีย  (กระบวนการนี้ดูจะสุ่มเสี่ยงต่อการที่บอร์ดจะล่ม แต่จริงๆแล้วไม่มีปัญหาใดๆครับ)

หลังจากอัพไฟล์ไปทับตัวเดิมเสร็จ ก็เรียกหาไฟล์ upgrade.php และคลิกดำเนินการตามขั้นตอนจนเสร็จ

สิ่งที่อยากจะเตือนให้ระวังหลังจากอัพเกรดแล้วก็คือ  การติ๊กกลับมาสู่โหมดปกติ
เวลาที่อัพเกรด ถ้าเป็นเวอร์ชั่น 1 เราต้องทำการเปลี่ยนภาษาให้เป็นภาษาอังกฤษ และเลือกธีมให้เป็นdefault เสียก่อน แต่เวอร์ชั่น 2 ไม่ต้องทำการใดๆ ระบบจะทำให้โดยอัตโนมัติครับ
และระหว่างที่ทำการอัพเกรดอยู่นั้น เพื่อป้องกันสมาชิกเข้ามาใช้งานบอร์ดในขณะที่ยังดำเนินการอยู่ ระบบจึงทำการเข้าสู่โหมด "เข้าโหมดบำรุงรักษา" ไว้

หลังจากอัพเกรดเสร็จเรียบร้อย ระบบจะเปลี่ยนภาษาให้เป็นภาษาไทยและเลือกธีมให้เป็นธีมเดิม แต่โหมด "บำรุงรักษา" ระบบมันไม่ติ๊กให้ครับ เราต้องติ๊กให้เอง

ถามว่าถ้าไม่ติ๊กแล้วจะเกิดปัญหาอะไรมั้ย?
ตอบว่า ไม่มีปัญหาอะไรหรอกครับ แต่สมาชิกจะไม่สามารถใช้งานบอร์ดได้เท่านั้นเอง !!

เข้าไปที่ ผู้ดูแล > ปรับแต่งบอร์ด >ค่าต่างๆในระบบ> ติ๊กเครื่องหมายถูกตรง  "เข้าโหมดบำรุงรักษา" ออก

เสร็จพิธีครับ
#57
 [SMF] แก้ปัญหาระบบไม่ยอมนับจำนวนกระทู้ของสมาชิก
ปัญหาคือ ปกติใต้ชื่อสมาชิกทุกคนจะมีข้อความ  กระทู้  xxx  คือ ระบบจำแสดงจำนวนกระทู้ที่โพสต์และกระทู้ตอบของสมาชิก แต่แล้วจู่ๆระบบก็ไม่ยอมนับกระทู้ซะอย่างนั้น !!

ปัญหานี้อาจเกิดขึ้นกับหลายๆบอร์ด แต่ไม่มีใครสังเกต เพราะบางคนคิดว่าไม่ใช่เรื่องใหญ่เรื่องโต หากเทียบกับเรื่องน้ำท่วม!!!!

แต่เราเชื่อว่าทุกปัญหาของ smf ต้องมีทางออกครับ

ปัญหานี้มักเกิดกับบอร์ดที่ได้รับการอัพเกรด ไม่ว่าจะอัพเกรดจากเวอร์ชั่น 1 เป็นเวอร์ชั่น 2 หรือจากเวอร์ชั่น 2.0 เป็นเวอร์ชั่น 2.0.2  ก็ตาม

วิธีแก้ไขง่ายมากครับ (แต่ก่อนจะง่ายอย่างนี้ ผมได้ผ่านกระบวนการลองผิดลองถูกมาแล้วทุกอย่าง) คือ  ให้ทำการอัพเกรดอีกรอบ !!

จบ

หมายเหตุ : อย่าลืมทำการอัพเกรดให้ถูกต้องตามขั้นตอนนะครับ  คือ
1. เปลี่ยนภาษาให้เป็นภาษาอังกฤษและเลือกธีมให้เป็นdefault
2.  ดาวน์โหลดไฟล์สำหรับอัพเกรด (ที่นี่ http://download.simplemachines.org)
3.  อัพโหลดไฟล์ที่ดาวน์โหลดมาแล้วไปที่บอร์ดไดเรกเทอรี่ ex. http://yoursite.com/yourboard/
4.  เรียกไฟล์ upgrade.php ผ่านบราวเซอร์ ex. http:/yoursite.com/yourboard/upgrade.php
5.  คลิกปุ่ม continue  ระบบจะทำการอัพเกรดจนเสร็จพิธี
#58
 [SMF] สิ่งที่ควรปรับแต่งหลัง install smf สำหรับเวอร์ชั่น 2 +

หลังจาก install smf เรียบร้อยแล้ว ไม่รู้จะเริ่มต้นปรับแต่งหรือแก้ไขอะไรดี (นอกจากปรับแต่งธีม) บทความนี้จะช่วยให้คุณง่ายขึ้นในการปรับแต่ง หรือหาเมนูสำหรับปรับแต่งเว็บบอร์ด

1. Anti spam  แน่นอนเว็บบอร์ดเปิดบริการเพื่อให้สมาชิกสามารถโพสต์กระทู้ ตอบกระทู้ได้ ดังนั้นเลี่ยงไม่ได้เลยที่จะต้องเจอกับสแปม
ใน smf เวอร์ชั่น 2 จะมีฟังก์ชั่น anti spam ที่ยากขึ้นกว่าเวอร์ชั่นเก่า คือ นอกจากจะมีการให้ระบุโค๊ดแล้ว ยังอนุญาตให้ผู้ใช้สามารถตั้งคำถามเองอีกด้วย
ผู้ดูแล >> ปรับแต่งบอร์ด >> Security and Moderation >>  Anti - spam
ด้านล่างสุดจะมีแทบเมนู Verification Questions  จะมีแบ่งบ็อกซ์ไว้ 2 ข้าง ฝั่งขวาคือ Question สำหรับตั้งคำถาม และฝั่งซ้าย เป็น Answer สำหรับตั้งคำตอบ
แนะนำให้ตั้งคำถามง่ายๆที่ใครๆก็รู้ แต่ spam ไม่รู้ เช่นถามว่า ประเทศไทยมีกี่จังหวัด,  11+9 = เท่าไร เป็นต้น เสร็จแล้วคลิกปุ่ม บันทึก
เพียงเท่านี้ก็จะกันสแปมต่างชาติได้ละ ถ้าเมื่อไรมีสแปมโผล่เข้ามาได้ เราค่อยมาเปลี่ยนคำถามใหม่

2. ตั้งเวลาในบอร์ดให้ตรงตามเวลาในประเทศไทย
ไปที่ ผู้ดูแล >> ปรับแต่งบอร์ด  >> Featured and Options >> General  ตรงเมนู Server timezone ให้เลือกเป็น Asia/Bangkok เสร็จแล้วคลิก บันทึก


3. การอนุญาต (Permissions) ควรกำหนดขอบเขตให้สมาชิกในบอร์ดว่า ควรทำอะไรได้บ้าง? ควรกำหนดตั้งแต่แรกเริ่ม เพราะเมนูบางอย่างหากเปิดให้สมาชิกใช้งานไประยะหนึ่งแล้วค่อยมาปิดการใช้งาน
อาจสร้างความไม่พอใจแก่สมาชิกได้  การอนุญาตเรื่องการแนบไฟล์ควรระวังให้เป็นสำคัญ
พิจารณาจากโฮสท์ที่เราใช้อยู่ว่ามีพื้นที่มากน้อยแค่ไหน หากมีพื้นที่มากและไม่กลัวว่าอนาคตไฟล์ที่สมาชิกแนบไฟล์จะโตจนโฮสท์เต็ม ก็เปิดให้สมาชิกแนบไฟล์ได้
แต่หากต้องการป้องกันพื้นที่เต็ม หรือมีพื้นที่น้อยอยู่แล้ว ควรปิดการแนบไฟล์เสีย โดยให้สมาชิกโพสต์ภาพที่เว็บฝากภาพแล้วนำเฉพาะลิงค์มาโพสต์อย่างเดียว

ผู้ดูแล >> ควบคุมสมาชิก >> Permissions.. >> Permission by Membergroup เลือกสมาชิกปรับแต่ง 2 เมนู คือ สมาชิกทั่วไปไม่ได้ลงทะเบียน และสมาชิกที่ไม่มีกลุ่ม
เลือกเมนูด้านขวามือ ..ขั้นสูง เสร็จแล้วดูที่เมนูด้านล่างสุด  Post attachments คลิกเข้าไปจะเห็นเมนู ตั้งกระทู้แนบไฟล์  ถ้าต้องการให้สมาชิกโพสต์หรือแนบไฟล์ได้ก็ให้ติ๊ก ถ้าไม่ต้องการก็ไม่ต้องติ๊ก ..กดบันทึก

4. ตั้งค่าธีมปัจจุบัน  ไปที่ ผู้ดูแล >> ปรับแต่งบอร์ด >> ตั้งค่าธีมปัจจุบัน
ในหน้านี้หากท่านใช้ธีม Default ก็จะมีเมนูสำหรับปรับแต่งบอร์ดอย่างง่ายๆ เปลี่ยนโลโก้ได้ ใส่สโลแกนเว็บบอร์ดใหม่ได้ เพิ่มหรือลดความกว้างของบอร์ดได้ในหน้าเดียวกันนี้

ในหน้าแรกของบอร์ดหากต้องการให้แสดงกระทู้ล่าสุดจากสมาชิก ต้องการให้แสดงกี่กระทู้ก็ระบุตัวเลขไปที่เมนู "จำนวนกระทู้ล่าสุดที่แสดงผลบนหน้ารวมบอร์ด:" (ในหน้าเดียวกันนี้) ถ้าไม่ต้องการให้แสดงเลยใส่เลข 0 ค่าดีฟอลต์คือ 0

ในหน้านี้ยังมีค่าต่างๆให้ระบุอีกมากมายซึ่งไม่ยากต่อการเข้าใจมากนัก ลองอ่านและปรับแต่งดูได้เองนะครับ

5. แจ้งข่าวในหน้าเว็บบอร์ด  ไปที่ ผู้ดูแล >> ควบคุมบอร์ด  >> ข่าวและจดหมายข่าว
จะมีฟอร์มสำหรับพิมพ์ข้อความข่าว หรือข้อความที่ต้องการทักทายสมาชิกในบอร์ด  ในหน้านี้สามารถใช้ bbcode ในการปรับแต่งข้อความให้มีสีสันได้


สำหรับค่าพื้นฐานที่จำเป็นในการเปิดใช้งานเว็บบอร์ดเท่านี้ก่อนครับ ส่วนฟังก์ชั่นอื่นๆที่จะเปิดใช้หรือปรับแต่งต่อไป นั่นเป็นเรื่องของ "ความต้องการ" ไม่ใช่ "สิ่งจำเป็น" คือมีก็ได้ ไม่มีก็ไม่เป็นไร และขึ้นอยุ่ที่ความต้องการของแต่ละบอร์ด
ซึ่งจะแตกต่างกันไป

ขอให้สนุกกับการแต่งบอร์ดนะครับ
#59
 [SMF] สร้างบล็อคให้ชุมชนด้วย Adk_Blog Mod

SMF เป็นโปรแกรมสำเร็จรูปในรูปของกระดานข่าว หรือเว็บบอร์ด แต่ก็มีความเป็นชุมชนสูง เพราะมีระบบสมาชิกที่ค่อนข้างแข็งแรง



หลายเว็บที่ใช้ smf เป็นตัวเว็บเลย เช่น zone-it.com , thaiseoboard.com , freemac.net ฯลฯ  แต่บางเว็บก็ใช้ smf เป็นแค่ส่วนหนึ่งของเว็บ  ซึ่งนั่นก็อยู่ที่ไอเดียของแต่ละเว็บว่าจะใช้อย่างไร
ถ้าถามว่า smf เหมาะกับแบบไหนมากที่สุด คงตอบได้ว่า เหมาะกับทุกแบบ อยู่ที่การนำไปใช้งาน

1. ถ้าต้องการสร้างชุมชนออนไลน์ที่สนใจในเรื่องใดเรื่องหนึ่ง ก็ทำ smf ให้เป็นเว็บไปเลย
2. แต่ถ้าต้องการมีพื้นที่เล็กๆสำหรับให้สมาชิกไว้แสดงความคิดเห็น ถาม-ตอบ บ้าง ก็เพียงเพิ่มไว้อีกเมนูหนึ่งในเว็บก็พอ

ว่าจะไม่เกริ่นยาว ..แต่ก็ยาวจนได้ อ่ะ งั้นเข้าเรื่องเลยนะ
วันนี้อยากจะมาเสนอ mod ตัวหนึ่งที่เหมาะสำหรับคนที่ใช้ smf เป็นเว็บ  มันมีชื่อว่า Adk_Blog

Adk_Blog คือมอดที่เข้ามาเพิ่มเมนูอีกเมนูหนึ่งให้กับบอร์ดของเรา นั่นคือ เมนู Blog
ด้วยความที่ smf เป็นโปรแกรมสำหรับตั้งและตอบกระทู้อย่างเดียว เจ้า Adk_Blog จึงเกิดขึ้นมาเพื่อช่วยในเรื่องของการเขียนบล็อกสำหรับสมาชิก

โดยสมาชิกแต่ละคนสามารถเพิ่มหมวดหมู่บล็อกของตัวเองได้  เขียนโปรไฟล์แนะนำตัวเองได้ ลบ/แก้ไขบล็อกตัวเองได้
บล็อกที่สมาชิกเขียนจะไปรวมในหน้าเดียวกันภายใต้เมนู /action=Blog

ในส่วนของแอดมินสามารถจำกัดสิทธิ์ว่า ให้สมาชิกกลุ่มไหนสามารถเขียล็อกได้บ้าง ..

สำหรับใครที่กำลังมองหาบล็อกสำหรับชุมชนของตัวเอง มอดตัวนี้น่าสนใจมากทีเดียวครับ

คลิกไปดาวน์โหลดมาใช้ได้ที่ http://custom.simplemachines.org/mods/index.php?mod=2611
#60
 เรื่องงงงง(อ่านว่า งง-งง) ของ Jquery กับ tinyMCE textEditor
เดี๋ยวนี้เว็บไหนไม่ใช้ javascript ก็ต้องใช้ jquery บ้างละ และเมื่อต้องการรับข้อมูลจากผู้ใช้ ก็ต้องมีฟอร์มสำหรับรับข้อมูล  แล้วฟอร์มสำหรับรับข้อมูลนั่นเล่า ก็ต้องมีการตรวจสอบในระดับหนึ่ง มิเช่นนั้น จะได้ข้อมูลกากๆเข้ามารกในดาต้าเบส!!

บทความนี้ไม่ได้จะมานำเสนอ jquery เช็คฟอร์มซึ่งมีคนพูดและเขียนถึงไว้เยอะแยะแล้วนั่น แต่จะบอกถึงการ get id จาก textarea ที่ใช้ tinyMCE textEditor
ฟอร์มที่รับข้อมูลที่เป็น textarea เช็คด้วย jquery ก็ง่ายๆ ธรรมดาๆ แต่เมื่อไรที่ฟอร์ม textarea ใช้ tinyMCE เป็นตัวจัดการเข้าการเช็คเริ่มมีความยุ่งยากในทันที
ผมนั่งงมเข็มแก้ปัญหานี้หนึ่งวันเต็มๆ ต้องสะกิด Chaiwit  มาช่วยกันถก และในที่สุดก็ไปเจอพี่ฝรั่งเขาเขียนไว้

http://stackoverflow.com/questions/2012312/validate-textarea-using-tinymce-jquery

การจะเก็ทค่ามันมาก็ด้วยคำสั่งนี้ครับ

var content = tinyMCE.get('msg').getContent(); // msg = textarea id

if( content == "" || content == null){
             $("#msg_error").html("* Can't add an empty message");
        }

เก็บไว้ประกอบความรู้ เผื่อใครเจอปัญหาเดียวกันจะได้ง่ายหน่อย หรืออย่างน้อยเจอปัญหานี้อีกเผื่อลืม!