ใส่รูป rank ใต้ avatar ใน phpbb

July 8th, 2009

กลัวลืมครับ ^^

ต้อง upload รูปด้วย FTP ขึ้นไปไว้ใน /images/rank

แก้ในเทมเพล็ตครับ ที่ templates/subSiver/viewtopic_body.tpl ครับ

ถ้ามีพื้นฐาน html คงเข้าใจนะครับ ใช้ Dream เปิดก็ได้
แล้วเลือกเอา {postrow.POSTER_RANK} (อันนี้ข้อความ) {postrow.RANK_IMAGE} (อันนี้รูป rank)
เอาไว้ข้างล่าง {postrow.POSTER_AVATAR} ครับ

แค่นี้ก็เรียบร้อยแล้ว

ปัญหาของ schedule ด้วย quartz

June 29th, 2009

เอามาเตื่อนใจตัวเองด้วยครับ^^
ถ้าเพื่อนคนไหนเจอ Error ตัวนี้น่ะครับ

org.quartz.SchedulerException: Based on configured schedule, the given trigger will never fire.

ให้คิดได้เลยครับว่าเป็นเพราะ local ของเครื่องเราหรือเครื่องที่ใช้งานไม่ใช้ US ครับ ให้ไปแก้ให้เป็น US ซะ เพราะมันเป็น bug ใน quartz ครับ ผมก็นั่งงงอยู่ตั้งนาน

เค้าเจอกันทั้งโลกครับ

Finally, I found that is a bug in quartz. It is about Locale.
My computer use B.D. (Buddhist Era = 2548) but quartz use A.D. (Christian Era = 2005)
that mean the day quartz used is alway before current date (2005 < 2548). I guess that it is because the line 1994 – 1999 in CronTrigger.java (cl=currentTime) (line 1692) Calendar cl = Calendar.getInstance(getTimeZone()); (line 1994) int year = cl.get(Calendar.YEAR); t = -1; // test for expressions that never generate a valid fire date, // but keep looping… if (year > 2099) return null;

to get an A.D. year (2005) You might change line 1692 to

Calendar cl = Calendar.getInstance(getTimeZone(),Locale.ENGLISH); (line 1692)

แต่คงไม่นานคงมีแก้ bug ตัวนี้แล้วละครับ รอรอรอ^^

เพิ่ม delete option ใน FCKeditor 2.6.4

June 25th, 2009

พอดีกำลังทดสอบเล่นเจ้า FCKeditor (พี่ที่ทำงานด้วยกันชื่อพี่ศักดิ์แนะนำตัวนี้มา ^^) ผมก็เลยจัดไปครับ Download FCKeditor 2.6.4 ลงมา ผลปรากฏว่าถูกโฉลก เอ้ย! ถูกใจมากเลยครับกับการใช้งานที่ง่ายและ support หลากหลายภาษา แต่ในส่วนของการ upload ไฟล์ หรือ รูป จะไม่มี Function Delete หรือลบไฟล์มาให้ เอ๊ะทำไงดี ก็เลยไปเจอวิธีเพิ่ม Option นี้ลงไปครับก็เลยเอามาแชร์ครับ ผมเอาไว้กันลืมด้วย อิอิ
มาเริ่มกันเลยครับ
1. หารูป delete มาใส่ไว้ที่ Folder filemanager/images/
2. ไปที่ไฟล์ filemanager/frmresourceslist.html และ
Edit Plus หรือ Tools อะไรก็ได้ครับที่พวกเราถนัดเปิดไฟล์นี้ออกมาเพื่อจะแก้ไข

  • สร้าง Link เพื่อลบไฟล์ ในที่นี้ใช้ function ชื่อ DeleteFile
    • ไปที่ Line 65 จะเห็นดังตัวอย่าง

      var sLink = ‘<a href=”#” onclick=”OpenFile(\” + ProtectPath( fileUrl ) + ‘\’);return false;”>’ ;

    • ให้เราใส่ Link ข้างล่างใต้่ Line 65

      var dLink = ‘<a href=”#” title=”Delete file” onclick=”DeleteFile(\” + ProtectPath(fileName) + ‘\’);return false;”>’ ;

  • ต่อมาให้สร้าง Link Delete ไปที่ Line 70
    • ไปที่ Line 70 จะเห็นดังตัวอย่างข้างล่าง

      return ‘<tr>’ +

      ‘<td width=”16″>’ +

      sLink +

      ‘<img alt=”” src=”images/icons/’ + sIcon + ‘.gif” width=”16″ height=”16″ border=”0″><\/a>’ +

      ‘<\/td><td>&nbsp;’ +

      sLink +

      fileName +

      ‘<\/a>’ +

      ‘<\/td><td align=”right” nowrap>&nbsp;’ +

      fileSize +

      ‘ KB’ +

      ‘<\/td><\/tr>’ ;

    • แก้เป็น

      return ‘<tr>’ +

      ‘<td width=”34″>’ +

      sLink +

      ‘<img alt=”” src=”images/icons/’ + sIcon + ‘.gif” width=”16″ height=”16″ border=”0″><\/a>’ +

      dLink +

      ‘<img alt=”” src=”images/delete.gif” width=”16″ height=”16″ border=”0″><\/a>’+

      ‘<\/td><td>&nbsp;’ +

      sLink +

      fileName +

      ‘<\/a>’ +

      ‘<\/td><td align=”right” nowrap>&nbsp;’ +

      fileSize +

      ‘ KB’ +

      ‘<\/td><\/tr>’ ;

  • ต่อมาให้สร้าง Function DeleteFile และ Function DeleteFileCallBack อาจจะสร้างไว้ก่อน before window.onload = { … } ก็ได้
    • Function DeleteFile

      function DeleteFile( fileName, fileUrl ) {
      if (confirm(‘Are you sure you wish to delete ‘ +
      ProtectPath(fileName) + ‘?’)) {
      oConnector.SendCommand( ‘DeleteFile’, “FileName=” +
      fileName, DeleteFileCallBack ) ;
      }
      }

    • Function DeleteFileCallBack

      function DeleteFileCallBack ( fckXml ) {
      if ( oConnector.CheckError( fckXml ) != 0 )
      return ;
      var oNodes = fckXml.SelectNodes( ‘Connector/Error’ );
      if (oNodes!=null && oNodes.length>0) {
      var errNo = parseInt(oNodes[0].attributes.
      getNamedItem(‘number’).value) ;
      switch (errNo) {
      case 0 :
      break;
      case 102 :
      case 103 :
      alert(oNodes[0].attributes.
      getNamedItem(‘
      originalDescription’).value);
      break;
      default:
      alert(‘DFi: Invalid XML response from
      connector..’);
      }
      } else {
      alert(‘DFi: Invalid XML response from connector.’);
      }
      Refresh();
      }

3. ไปที่ filemanager/connectors/php/commands.php

  • เพิ่ม Function DeleteFile เพื่อไว้ delete file ครับ

    function DeleteFile($resourceType, $currentFolder) {
    $sErrorNumber = ‘0’ ;
    $sErrorMsg = ” ;

    if ( isset( $_GET[‘FileName’] ) ) {

    // Map the virtual path to the local server path.
    $sServerDir = ServerMapFolder( $resourceType, $currentFolder ) ;

    $sFileName = $_GET[‘FileName’] ;

    if ( strpos( $sFileName, ‘..’ ) !== FALSE ) {
    $sErrorNumber = ‘102’ ; // Invalid file name.
    $sErrorMsg = ‘Invalid file name’;
    } else {
    if ( @unlink($sServerDir.$sFileName) ) {
    $sErrorNumber = ‘0’ ; // deleted
    } else {
    $sErrorNumber = ‘103’ ; // not deleted
    $sErrorMsg = ‘Could not delete file ‘.$sServerDir.$sFileName;
    }
    }
    } else {
    $sErrorNumber = ‘102’ ; // no file set
    $sErrorMsg = ‘No file specified’;
    }

    // Create the “Error” node.
    echo ” ;
    }

4. ไปที่ filemanager/connectors/php/connector.php

  • ไปที่ Function DoResponse เพิ่มตามข้างล่างต่อจาก break หลังสุด

    case ‘DeleteFile’ :
    DeleteFile( $sResourceType, $sCurrentFolder ) ;
    break ;

5. ไปที่ filemanager/connectors/php/config.php Line ที่ 54 เพิ่ม “DeleteFile” เพื่อให้มันยอมรับ

จบแล้วครับ ดูเหมือนแค่ 5 ข้อ แต่กว่าผมจะทำได้ครบเหนื่อยเหมือนกันครับสำหรับมือใหม่อย่างผม แฮ่ๆ