Thứ Hai, 12 tháng 4, 2010

Tạo MediaHelper trong CakePHP

Hi, hôm nay mình xin mạn phép post 1 bài để share Helper này cho mọi người.

Thật sự thì công việc này cũng rất dễ dàng nhưng sẽ rất mất thời gian nếu bạn có ý định làm 1 website chia sẻ nhạc, hình ảnh, các clip hay...

- Tại sao lại mất thời gian?

xin trả lời: nếu bạn không tạo 1 function  thì tại mỗi trang bạn muốn hiển thị ảnh, clip nhạc. Công việc phải làm của bạn lúc này là :

  • lấy tên file.

  • kiểm tra file tồn tại không.

  • kiểm tra định dạng file.

  • hiển thị.


Vậy, chỉ có 1 việc mà phải copy, parse ra từng trang 1 làm j` cho khổ. Hãy tạo cho website của bạn 1  file media.php trong helper có nội dung như sau:
<?php
class MediaHelper extends AppHelper {

/**
* @author tungnd
* @return embed or img tag.
* */

function create($file_name,$w = null,$h = null)    {
// tao duong dan file
$path = WWW_ROOT . 'img' . DS. $file_name;
// kiem tra file co ton tai ko
if (file_exists($path)) {
// lay thong tin file
$path_info = pathinfo($path);
// kiem tra dinh dang file (image)
if ($path_info['extension'] == 'jpg' || $path_info['extension'] == 'gif' || $path_info['extension'] == 'png')    {
$obj = '<img height="'.$h.'" width="'.$w.'" border="0" src="img/'.$file_name.'"/>';
}
else if ($path_info['extension'] == 'swf' )    {
$obj = '<embed src="img/'.$file_name.'" quality="high" bgcolor="#ffffff" width="'.$w.'" height="'.$h.'" name="Untitled.swf" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" autostart="true" pluginspage="http://www.macromedia.com/go/getflashplayer">';
}
else if ( $path_info['extension'] == 'mp3' || $path_info['extension'] == 'wma')    {
$obj = '<embed type="application/x-mplayer2"
Autostart="1"
Pluginspage="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=6,0,0,0"
Src="img/'.$file_name.'"
Showstatusbar="1"
Showcontrols="1"
Showdisplay="1"
Showaudiocontrol="1"
Enablecontextmenu="0"
Enabled="1"
Autorewind="1"
Volume="100"
AudioStream="1"
AutoSize="1"
AnimationAtStart="-1"
AllowScan="-1"
AllowChangeDisplaySize="-1"
Balance="0"
BufferingTime="5"
CaptioningID="5"
ClickToPlay="-1"
CursorType="0"
CurrentPosition="-1"
CurrentMarker="0"
DisplayBackColor="0"
DisplayForeColor="16777215"
DisplayMode="0"
DisplaySize="4"
EnablePositionControls="-1"
EnableFullScreenControls="0"
EnableTracker="-1"
InvokeURLs="-1"
Language="-1"
Mute="0"
PreviewMode="0"
Rate="1"
SelectionStart="-1"
SelectionEnd="-1"
SendOpenStateChangeEvents="-1"
SendWarningEvents="-1"
SendErrorEvents="-1"
SendKeyboardEvents="0"
SendMouseClickEvents="0"
SendMouseMoveEvents="0"
SendPlayStateChangeEvents="-1"
ShowCaptioning="0"
ShowGotoBar="0"
ShowTracker="-1"
TransparentAtStart="0"
VideoBorderWidth="0"
VideoBorderColor="0"
VideoBorder3D="0"
WindowlessVideo="0"
Width="300">';
}
else    {
$obj = 'Sai định dạng file. ';
}
}
else    {
$obj = 'Không tìm thấy file yêu cầu. ';
}
return $obj;
}

}
?>

Bây giờ, khi muốn hiển thị ảnh, clip nhạc của bạn tại views thì chỉ việc:
<?php echo $media->create('tenfile.dinhdang','chieu rong','chieu cao'); ?>

// chieu rong va chieu cao co the de trong.

Ở đây tôi chỉ xét các file: jpg, gif, png, swf, mp3, wma. Nếu dự án của bạn cần hiển thị 1 vài định dạng file khác thì hãy thêm các else if, nhiều quá thì chuyển code sang switch- case cho dễ nhìn.

4 nhận xét:

  1. Bạn ơi , bạn có thể ghi gõ hơn về đường dẫn để lưu các tập tin (media.php nó được lưu ở đâu mới có thể chạy được).
    Tôi làm theo phần chỉ dẫn của bạn không được, vì bạn chỉ không kỹ nên tôi làm không được.Nhờ bạn ghi gõ hơn nhé, cám ơn bạn nhiều.

    Trả lờiXóa
  2. sorry mình quên mất, bạn lưu các file vào thư mục img của cake nhé.

    Trả lờiXóa
  3. bạn cho mình hỏi nếu mình muốn lấy ảnh từ cơ sở dữ liệu mysql rồi cho nó hiển thị lên form thì phải làm thế nào hả bạn và tạo cả nút next và back cho bức ảnh đó nũa, trên mỗi bức ảnh lại hiển thị một nút để xem thông tin của bức ảnh đó nữa ??? Bạn giúp mình với nhe chứ mình làm mãi mà ko được!!! Thanks!

    Trả lờiXóa
  4. bạn lưu vào csdl tên ảnh, muốn hiện ra thì lấy tên ảnh đó ra rồi cho vào thẻ img : .
    Còn bạn muốn có nút next và back để chuyển ảnh thì share bừa mấy cái của jquery cho nhanh.
    http://speckyboy.com/2009/06/03/15-amazing-jquery-image-galleryslideshow-plugins-and-tutorials/

    Trả lờiXóa