ข้ามไปที่เนื้อหาหลัก

การนำ Upload.Class ของ Verot มาใช้งานร่วมกับ Codeignator


ผมเป็นคนหนึงที่ชื่นชอบ PHP Framework โดยหยิบเอาตัว Codeigniter มาใช้เป็นตัวแรก และก็ติดใจ ลองๆ ใช้ไปก็พบว่าเจ้าระบบอัพโหลดไฟล์ที่มีมาให้นั้น ยังไม่ค่อยครบครันเท่าไหร่ เพราะเขียนปกติจะใช้ Library upload ของ Verot อัพโหลด เพราะว่า Class นี้ค่อนข้างครบในตัวเองอยู่แล้ว มีตัวจัดการไฟล์เกือบหมด ทั้งรูปภาพ และไฟล์อื่นๆ



ขั้นตอนการนำ Library เข้ามาใช้งานปกติแล้ว Codeigniter มีกฎว่าจะต้องทำการโหลด Library เข้ามายังหน้า Controller ก่อนแต่ตัว Library upload นี้อยู่ในรูปแบบ Construct คือประกาศแล้วใช้งานเลย แถมยังกำหนดให้เรียกหาค่าของไฟล์ที่อัพโหลดทันที ซึ่งการที่จะใช้งานสามารถทำได้ โดยการสร้าง Library อีกตัวมาเรียกใช้งาน Library ตัวนี้

สร้างไฟล์ Library ผมตั้งชื่อว่า myupload.php เก็บไว้ที่ application/libraries/ และเก็บตัว Library upload ของ Verot ไว้ที่เดียวกัน เพื่อให้ง่ายต่อการเรียกใช้งาน

require_once(APPPATH.'libraries/class.upload/class.upload.php');

class MyUpload extends upload{
 
 public function MyUpload(){
  
 }
}

จากนั้นก็โหลดใช้งานได้จาก Controller ที่เราต้องการใช้งาน แบบนี้

$this->load->library('MyUpload');

ทีนี้เราก็จะสามารถใช้งาน Library ตัวได้แล้วครับ ซึ่งการใช้งานก็เหมือนที่เคยใช้ปกติครับ ผมมีตัวอย่างการใช้งานคร่าวๆ ครับ ซึ่งในตัวอย่างผมได้เขียน Method เพิ่มใน Library myupload แล้วเรียกใช้งานอีกที

public function imgUploadRatioY($srcFile, $file_dst_path, $file_new_name, $file_new_ext, $width){

  $this->upload($srcFile);
  
  if($this->uploaded){
   if($this->file_is_image){
    if($this->file_src_size < 2048000){
     
     $this->file_new_name_body = $file_new_name;
     $this->file_new_name_ext = $file_new_ext;
     $this->image_resize = TRUE;
     $this->file_force_extension = TRUE;
     $this->image_x = $width;
     $this->image_ratio_y = TRUE;
     $this->process($file_dst_path);
     
     if($this->processed){
      return $this->uploadFile = $this->file_dst_name;
     }else{
      return $this->error = 'เกิดความผิดพลาดกรุณาลองใหม่';
     }
    }else{
     return $this->error = 'ไฟล์มีขนาดใหญ่เกิน 2 MB';
    }
   }else{
    return $this->error = 'กรุณาใช้ไฟล์รูปภาพเท่านั้น';
   }
  }
 }

เวลาใช้งานเราก็เรียกแบบนี้เลยครับ ^ ^
if(!empty($_FILES['emag_cover']['tmp_name'])){
     $upload = $this->myupload->imgUploadRatioY($_FILES['emag_cover'], $path, $newFileName, 'gif', 150);
}else{
     $upload = '';
     $this->myupload->error = '';
}

เพียงเท่านี้เราก็จะสามารถใช้งาน Library Upload ของ Verot ได้แล้วครับ

โพสต์ยอดนิยมจากบล็อกนี้

มาเข้าใจ และใช้ Datatable ดึงข้อมูลแบบ Server-side ด้วย PHP, MySQL กันเถอะ

มีช่วงหนึงผมเคยนำ datatable มาพัฒนาในงานแต่เกิดปัญหาเนื่องจากมีข้อมูลขนาดใหญ่ ทำให้เกิดการโหลดในครั้งแรกที่โหลดหน้าเพจนั้นๆ เนื่องจากผมใช้ Ajax ในการโหลดข้อมูลทั้งหมดมาในครั้งเดียวด้วยจำนวนข้อมูล 1000 ขึ้น ซึ่งตอนนั้นผมคิดว่าการทำ preload น่าจะช่วยได้ แต่ว่าถ้า user เกิดเผลอไปกด refesh หรือแก้ไขข้อมูลเวลากลับมาที่หน้าข้อมูลก็ต้องโหลดใหม่อีก ทำให้ผมเลิกใช้ datatable ไปเลย เพราะคิดว่ามันคงไม่เหมาะ

แต่ในความจริงแล้ว datatable ก็ได้มีสิ่งที่มาแก้ในจุดนั้นได้ ซึ่งเรียกว่า server-side โดยการที่อนุญาตให้เรา query ข้อมูลออกมาก่อนแล้วส่งมาให้ datatable อ่านข้อมูลในจำนวนที่น้อยลง หลักการก็เหมือนๆ กับบทความการทำสร้าง XML จากข้อมูลขนาดใหญ่นั่นแหละครับ แต่มีเงื่อนไขเพียงแต่ว่า ต้อง Filter และส่งข้อมูลออกมาในรูปแบบที่ตรงตามหลักของ datatable เท่านั้น ( บางครั้งเวลาเข้าไปอ่าน Document หรือดู Example จะงงๆ ว่าอะไรเยอะแยะ ) โดยวันนี้จะมาแนะนำการใช้งานแบบง่ายๆ กันเลย :D

การใช้งาน fputcsv() สำหรับการทำ Report CSV

เรื่องของเรื่อง ถูกมอบหมายให้ทำ Report ที่สามารถ Export ออกมาเปิดดูใน Excel ได้ ไอ้คนคิดน้อยอย่างผมก็ไม่คิดมากครับไปโหลด PHPExcel มาใช้เลยทำอยู่นาน ปรากฏว่า Project Manager มาดูเค้าก็แนะนำว่า ใช้ Library ยากไปเปลี่ยนๆ มาใช้ฟังก์ชันง่ายๆ ตัวนี้ดู

วันนี้เลยอยากจะมาแนะนำการทำ Report ออกมาเป็นไฟล์ CSV แบบง่ายๆ โดยไม่พึ่ง Library ใดๆ ผ่านฟังก์ชัน fputcsv() กันครับ ลองดูๆ

การติดตั้ง Google Analytics ด้วย Google Tag Manager

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