หมวดไฟฟ้า/อิเล็กทรอนิกส์/คอมพิวเตอร์ => Programming => ห้องคอมพิวเตอร์ => ห้อง SMF 2.0.X => ข้อความที่เริ่มโดย: Auto Man ที่ 08 พฤษภาคม 2559, 10:57:28

หัวข้อ: กลับมาอีกครั้งกับ Thank Cool V.2
เริ่มหัวข้อโดย: Auto Man ที่ 08 พฤษภาคม 2559, 10:57:28
มาจากที่นี่ http://hot-th.com/thread-3343-1-1.html

สำหรับในเวอร์ชั่นมีการแก้ไขโค้ดให้มีความกระชับมากขึ้น, เก็บแมลงนิดหน่อย
โดยการนำ javascript framework ของ jquery มาใช้ครับ
และส่วนของด้าน server นั้นจะต้องเป็น PHP5 เท่านั้นนะครับ และต้องเปิดใช้งานฟังก์ชั่น json ด้วยนะครับ
การส่งข้อมูลไปยังด้าน server ได้เปลี่ยนเป็นแบบ POST แทนครับ แต่การเก็บข้อมูลยังคงเก็บลงไฟล์เหมือนเดิมครับ

Edit1: เขียนโค้ดตกไปนิดนึงครับ ได้แก้ไขเรียบร้อยแล้วครับ และสามารถใช้งานร่วมกับ Mod Pretty URLs ได้ด้วยนะครับ

วิธีการติดตั้ง

- สร้างไฟล์เดอร์ TDB ในโฟลเดอร์บอร์ดของคุณและ cmod เป็น 777 ด้วยนะครับ
- ดาวน์โหลด jquery-1.3.2.min.js แล้วอัพโหลดไปไว้โฟลเดอร์ธีมที่ใช้
- สร้างไฟล์ thankcool.php แล้วใส่โค้ดนี้ลงไป
โค๊ด: [Select]
<?php
// ThankCool by [DomeniC]
require_once 'SSI.php';
$id = (int)$_POST['id'];
$se = (int)$_POST['se'];
$uid $context['user']['id']; // alias
if(empty($id) || empty($se)){
        die();
}
$td = array();
if(
is_readable('TDB/'.$id.'.db')){
    
$tt file_get_contents('TDB/'.$id.'.db');
    
$td explode(','$tt);
}
if(
in_array($uid$td)){
        echo 
json_encode(array(
                
'status' => 'error',
                
'message' => 'You gave ThankCool!'
        
));
        die();
}
$td[] = $uid;
file_put_contents('TDB/'.$id.'.db'implode(','$td));
$o '<br /><br /><span style="color:#588000">ThankCool By: </span>';
foreach(
$td as $c => $t){
        
loadMemberData($tfalse'profile');
        
loadMemberContext($t);
        
$sep = ($c == 0) ? '' ', ';
        
$o .= $sep.$memberContext[$t]['link'];
}
echo 
json_encode(array(
        
'status' => 'ok',
        
'id' => $id,
        
'newlist' => $o
        
)
);
?>

- อัพโหลดไฟล์ thankcool.php ไปไว้โฟลเดอร์บอร์ดของคุณ

- สร้างไฟล์ thankcool.js ใส่โค้ดนี้ลงไป
โค๊ด: [Select]
/* ThankCool by [DomeniC] --> AJAX client side */
function thankcool(msg_id){
        var el = $('#tc_' + msg_id);
        var bt = $('#tcb_' + msg_id);
        var url = smf_scripturl.replace(/index.php/, '');
        if(!el) return false;
        if(!bt) return false;
        $.post(url + 'thankcool.php', {id: msg_id, se: new Date().getTime()}, function(json) {
                if(json.status == 'error')
                        return alert('error! ' + json.message);
                bt.css('cursor', 'default');
                bt.html('<b>ThankCooled!</b>');
                el.html(json.newlist);               
        }, 'json');
}

- อัพโหลดไฟล์ thankcool.js ไปไว้โฟลเดอร์ธีมที่ใช้

- เปิดไฟล์ Sources/Display.php

- หาโค้ดนี้
โค๊ด: [Select]
$message['body'] = parse_bbc($message['body'], $message['smileysEnabled'], $message['ID_MSG']);
- ใส่โค้ดนี้บรรทัดต่อไป
โค๊ด: [Select]
    /* ThankCool by [DomeniC] --> load data */
    if(is_readable('TDB/'.$message['ID_MSG'].'.db')){
        $thxd = explode(',', file_get_contents('TDB/'.$message['ID_MSG'].'.db'));
    }else{
        $thxd = array();
    }
    $thxraw = $thxd;
    if($thxd){
        foreach($thxd as $j => $m){
            loadMemberData($m, false, 'profile');
            loadMemberContext($m);
            $thxd[$j] = $memberContext[$m]['link'];
        }
    }

- หาโค้ดนี้
โค๊ด: [Select]
'can_see_ip' => allowedTo('moderate_forum') || ($message['ID_MEMBER'] == $ID_MEMBER && !empty($ID_MEMBER)),
- ใส่โค้ดนี้บรรทัดต่อไป
โค๊ด: [Select]
                'tc' => $thxd,
                'tcraw' => $thxraw

- เปิดไฟล์ Display.template.php

- หาโค้ดนี้
โค๊ด: [Select]
                // Show the post itself, finally!
                echo '
                                                                </td>
                                                        </tr></table>
                                                        <hr width="100%" size="1" class="hrcolor" />
                                                        <div class="post"', $message['can_modify'] ? ' id="msg_' . $message['id'] . '"' : '', '>', $message['body'], '</div>', $message['can_modify'] ? '
                                                        <img src="' . $settings['images_url'] . '/icons/modify_inline.gif" alt="" align="right" id="modify_button_' . $message['id'] . '" style="cursor: pointer; display: none;" />' : '' , '
                                                </td>
                                        </tr>';

- ใส่โค้ดนี้ทับลงไป
โค๊ด: [Select]
                // Show the post itself, finally!
                echo '
                                                                </td>
                                                        </tr></table>
                                                        <hr width="100%" size="1" class="hrcolor" />';
                if ($context['user']['is_logged'] && !in_array($context['user']['id'], $message['tcraw']) && $context['user']['id'] != $message['member']['id'])
                        echo '       
                                        <a id="tcb_'.$message['id'].'" style="tc_link" href="javascript://thankcool'.$message['id'].'"><b>ThankCool!</b></a>
                                        <div style="clear:left"></div>
                                        <hr width="100%" size="1" class="hrcolor" />';
                echo '
                                                        <div class="post"', $message['can_modify'] ? ' id="msg_' . $message['id'] . '"' : '', '>', $message['body'], '</div>
                                                        <div id="tc_' . $message['id'] . '">';
                if (!empty($message['tc']))
                        echo '
                                                                <br /><br /><span style="color:#588000">ThankCool By: </span>' . implode($message['tc'], ', ');
                echo '
                                                        </div>';
                echo
                                                        $message['can_modify'] ? '
                                                        <img src="' . $settings['images_url'] . '/icons/modify_inline.gif" alt="" align="right" id="modify_button_' . $message['id'] . '" style="cursor: pointer; display: none;" />' : '' , '
                                                </td>
                                        </tr>';

- เปิดไฟล์ index.template.php
- หาโค้ดนี้
โค๊ด: [Select]
        <title>', $context['page_title'], '</title>';
- ใส่โค้ดนี้ลงไปก่อนหน้า
โค๊ด: [Select]
        <script type="text/javascript" src="', $settings['theme_url'], '/jquery-1.3.2.min.js"></script>
        <script type="text/javascript" src="', $settings['theme_url'], '/thankcool.js"></script>

เป็นอันว่าเสร็จเรียบร้อยแล้วครับ
ปล1. มีปัญหาจุดไหนก็ตอบกระทู้ไว้นะครับ
ปล2. ตั้งกระทู้นี่เหนื่อยกว่าเขียนโค้ดซะอีก
หัวข้อ: กลับมาอีกครั้งกับ Thank Cool V.2
เริ่มหัวข้อโดย: Auto Man ที่ 08 พฤษภาคม 2559, 11:34:18
  ไม่สำเร็จ เกิดเออร์เรอร์
หัวข้อ: กลับมาอีกครั้งกับ Thank Cool V.2
เริ่มหัวข้อโดย: Auto Man ที่ 08 พฤษภาคม 2559, 11:39:59
  งั้นเอาตัวนี้ไปใช้แทนก่อน
LikePosts
http://custom.simplemachines.org/mods/index.php?mod=3708

ตรงนี้มีภาพ! แต่ท่านจะมองไม่เห็น , ท่านต้อง  สมัครสมาชิก หรือ ลงชื่อเข้าระบบ
 (http://upic.me/show/58436050)

ตรงนี้มีภาพ! แต่ท่านจะมองไม่เห็น , ท่านต้อง  สมัครสมาชิก หรือ ลงชื่อเข้าระบบ
 (http://upic.me/show/58436051)

ตรงนี้มีภาพ! แต่ท่านจะมองไม่เห็น , ท่านต้อง  สมัครสมาชิก หรือ ลงชื่อเข้าระบบ
 (http://upic.me/show/58436052)

ตรงนี้มีภาพ! แต่ท่านจะมองไม่เห็น , ท่านต้อง  สมัครสมาชิก หรือ ลงชื่อเข้าระบบ
 (http://upic.me/show/58436053)