1111111111111


เว็บใหม่ที่ผมขอใช้ฟรีครับ ภาวนาอยู่ว่าวันดีคืนดีข้อมูลคงไม่หายเหมือนเว็บอื่น

วันจันทร์ที่ 28 กุมภาพันธ์ พ.ศ. 2554

แนะนำเว็บที่เขานำเสนอข้อมุลเกี่ยวกับการพัฒนาเว็บด้วย Yii Framework ครับ

Yii Playground is a demo application that uses the PHP Yii Framework



http://www.yiiplayground.cubedwater.com/
http://code.google.com/p/yiiplayground/



วันอาทิตย์ที่ 27 กุมภาพันธ์ พ.ศ. 2554

โปรแกรมเมอร์คนไทยแต่ชอบมีปัญหากับวันที่ภาษาไทย

หรือว่าผมแก่แล้วก็ไม่รู้นอนไม่ค่อยหลับครับ บังคับตัวเองนอนก็ใช้การไม่ได้ (ไม่หลับ) ใหนๆก็ไม่หลับ โปรแกรมที่รับมาพัฒนาก็ส่งงานเสร้จแล้ว ก็เลยมานั่งเขียน Blog ดีกว่า
ผมเอาคลาส Thaidate มาแนะนำอีกคลาสครับผมเคยแนะนำมาแล้ว 1 คลาส แต่ผมชอบแบบนี้มากกว่า




class Thaidate {


public static function DateThaiLong($strDate) {
if(!strtotime($strDate)) return "ไม่ระบุ";
try{
$strYear = date("Y",strtotime($strDate))+543;
$strMonth= date("n",strtotime($strDate));
$strDay= date("j",strtotime($strDate));
$strHour= date("H",strtotime($strDate));
$strMinute= date("i",strtotime($strDate));
$strSeconds= date("s",strtotime($strDate));
$full_month = array('','มกราคม', 'กุมภาพันธ์', 'มีนาคม', 'เมษายน',
'พฤษภาคม', 'มิถุนายน', 'กรกฎาคม', 'สิงหาคม',
'กันยายน', 'ตุลาคม', 'พฤศจิกายน', 'ธันวาคม'
);

$strMonthThai= $full_month[$strMonth];
if($strHour == 0 && $strMinute == 0 && $strSeconds ==0)
return "$strDay $strMonthThai $strYear";
else
return "$strDay $strMonthThai $strYear เวลา $strHour:$strMinute:$strSeconds น.";

}catch (Exception $e){
return "ไม่ระบุ";
}


}//end class



เวลาเอาไปใช้ก็



วันพฤหัสบดีที่ 24 กุมภาพันธ์ พ.ศ. 2554

ทำไมพระเจ้าถึงไม่สร้างฝนแถวตะวันออกกลาง ซึ่งต่างกับแถวเมซิโก

พึ่งรู้นะเนี้ย.. น่าจะจริงอย่างว่า



ทำไมต้องยอมแพ้ มนุษย์ขี้เหม็น (ขี้ตนเองตมทุกวันไม่พูดอะไร แต่ตดคนอื่นบอกว่าเหม็น)

ชายคนหนึ่งเพิ่งจะมาพูดได้ ตอนอายุ 4 ขวบ
ชายคนนั้น...เพิ่งจะมาอ่านหนังสือออกตอนอายุ 8 ขวบ
ชายคน นั้น...เคยถูกไล่ออกจากโรงเรียน
ชายคนนั้น...เคยถูกปฎิเสธจากโรงเรียนอาชีวะ แห่งซูริค
ชายคนนั้น...เคยถูกอาจารย์ระบุว่า "สมองช้า
ไม่ชอบสังคมและ ล่องลอยอยู่ในความฝันอันโง่เขลาของตัวเองตลอดเวลา"
ชายคนนั้น...ชื่อ "อัลเบิร์ต ไอสไตน์" บิดาแห่งปรมาณู



----------------------------------------------------------------
ชายคนหนึ่ง หลงใหลในคอมพิวเตอร์อย่างมาก
ชายคนนั้น...ชอบหมกตัวกับ คอมพิวเตอร์เป็นเวลานานๆ
ชายคนนั้น...ถูกเพื่อนมองว่า "สกปรก - บ้า คอมพิวเตอร์"
ชายคนนั้น...เคยเสนอซอฟแวร์ระบบให้กับ แอปเปิ้ล คอมพิวเตอร์
ชายคนนั้น...ถูกปฎิเสธอย่างไม่ใยดี
ชายคนนั้น...ปัจจุบัน คือผู้ให้การช่วยเหลือด้านเงินทุนกับ แอปเปิ้ลคอมพิวเตอร์
ชายคนนั้น...เคย ถูก ไอบีเอ็ม มองว่า "แค่เด็ก"
ชายคนนั้น...ปัจจุบันเป็นผู้นำบริษัทซอฟแวร์ ที่ทรงอิทธิพลมากที่สุดในโลก
ชายคนนั้น...ชื่อ วิลเลี่ยม เฮนรี่ เกตส์ ที่ สาม หรือที่รู้จักกันในนาม
"บิลล์ เกตส์" ผู้ก่อตั้งไมโครซอฟต์ มหาเศรษฐี อันดับหนึ่งของโลก
ผู้ถือครองสินทรัพย์กว่า 46,000 ล้านเหรียญ



วันจันทร์ที่ 21 กุมภาพันธ์ พ.ศ. 2554

การเพิ่มข้อมูล User โดยการสร้างคลาสที่ถ่ายทอดมาจาก CWebUser

การเพิ่มข้อมูล User โดยการสร้างคลาสที่ถ่ายทอดมาจาก CWebUser สามารถทำได้ดังนี้

1 ต้องมี User model (class User extends CActiveRecord) เก็บไว้ที่ protected/models/User.php


// this file must be stored in:
// protected/models/User.php

class User extends CActiveRecord
{
/**
* Returns the static model of the specified AR class.
* @return CActiveRecord the static model class
*/
public static function model($className=__CLASS__)
{
return parent::model($className);
}

/**
* @return string the associated database table name
*/
public function tableName()
{
return 'User';
}
}





วันอาทิตย์ที่ 20 กุมภาพันธ์ พ.ศ. 2554

การใช้ distinct (ของคำสั่ง SQL) ในคำสั่ง findAll()

ก่อนอื่นต้องขอทบทวนก่อนว่า distinct (ของคำสั่ง SQL) คือ คำสั่งที่ตัดค่าที่ซ้ำกันออกไป

การนำมาใช้ใน findAll() หรือ find*() (* หมายถึงอื่นๆนะครับ เช่น find(), findAll(), findByPk(), findAllByPk(), findByAttributes(), findAllByAtributes())


....
....
$models=Thai::model()->findAll(array(
'select'=>'province',
'distinct'=>true,
));
....
....

อีกรูปแบบของการใช้ distinct (ของคำสั่ง SQL) ด้วย CDbCriteria

....
....
$criteria=new CDbCriteria;
$criteria->distinct = true;
$criteria->compare('province', $this->province, true);
$criteria->order ='province DESC, ampur ASC';
....
....


นอกจากนั้น find*() ยังสามารถใช้คุณสมบัติของ



วันเสาร์ที่ 19 กุมภาพันธ์ พ.ศ. 2554

AjaxValidation with multiple models and one form

ประมาณ มีหลาย Model ที่จะทำการ ตรวจสอบข้อมูลของ Form


beginWidget('CActiveForm', array(
'id'=>'user-form',
'enableAjaxValidation'=>true,
)); ?>

Fields with * are required.



errorSummary($model); ?>



labelEx($model,'region_id');?>
textField($model,'region_id'); ?>
error($model,'region_id'); ?>




labelEx($acl,'userName'); ?>
textField($acl,'userName',array('size'=>20,'maxlength'=>25)); ?>
error($acl,'userName'); ?>


......


ในส่วน Action



การเรียกใช้เมนูตามสิทธิที่ได้ (ช่วงนี้เมืองไทยเรียกร้องสิทธิกันบ่อยต้องอินเทรนหน่อย)

การเรียกใช้เมนูตามสิทธิที่ได้ หมายถึงแสดงเมนูตามที่สิทธิของ user นั้นๆมี

ทบทวนกันหน่อย การกำหนดการเข้าใช้งาน Action ต่างๆกำหนดที่ Controller ถูกใหมครับ เช่น


class ReservationController extends Controller{
.....
.....
public function accessRules(){
return array(
array('allow',
'actions'=>array('view','create','update','index','print','report','department'),
'users'=>array('admin'),
),
array('allow',
'actions'=>array('view','index','email'),
'users'=>array('@'),
),
array('deny', // deny all users
'users'=>array('*'),
),
);
}
.....
.....
}


ด้านบนเป็นการกำหนดสิทธิการเข้าถึงหรือเข้าใช้งาน ถูกใหมครับ
'users'=>array('admin'), หมายถึงเฉพาะ admin
'users'=>array('@'), หมายถึงเฉพาะผู้ที่ login
'users'=>array('*'), หมายถึงใครก็ได้
จาก code ด้านบน

array('allow',
'actions'=>array('view','create','update','index','print','report','department'),
'users'=>array('admin'),
),


หมายถึง อนุญาติ (allow) ให้เฉพาะ admin เท่านั้นที่ 'view','create','update','index','print','report','department'

แต่ปัญหาที่ผมเจอคือเวลาแสดงใน view จะมีเมนูสำหรับ admin ทั้งๆที่ไช่ admin จึงได้ไปปรึกษาอิคคิวซังได้ผลมาดังนี้


การกำหนดเมนูโดยแสดงตามสิทธิของ user ขอย้ำว่าเป็นสว่นของเมนู



ตัวอย่างการค้นหาข้อมูลที่ส่งมาครับ

ตัวอย่างการค้นหาข้อมูลที่ส่งมาครับ

เช่นการค้นหา พนักงาน (Emplotee) ที่สังกัดคณะที่มี รหัlคณะ(facultyID) เท่ากับ ค่าที่ส่งมา $_GET['facultyID']


$client= Emplotee::model()->findByPk($_GET['facultyID']);


การค้นหาข้อมูล User จากค่าที่ส่งมา คือ $_GET['fname'] และ $_GET['flname'] ครับ



พอดีไปเจอมา การใส่ปุ่มใน Grid ครับ

การกำหนดปุ่มเราต้องกำหนดในส่วนของ CButtonColumn
และเมื่อมาดูที่ 'template'=>'{view} {update} {delete} {newjob}', ถ้าหากว่าอยากสร้างปุ่มของตนเองเพิ่มเช่น ปุ่ม newjob




array(
'class'=>'CButtonColumn',
'template'=>'{view} {update} {delete} {newjob}', //ขั้นตอนที่ 1. กำหนด {newjob}
'header'=>'Actions',
'buttons'=>array('newjob' => array(
'label'=>'New Job',
'url'=>'Yii::app()->createUrl("job/create",array("clientid"=>$data->id))',
'imageUrl'=>Yii::app()->request->baseUrl.'/images/job.png',
),
),
'htmlOptions'=>array('width'=>75),

),



วันพุธที่ 16 กุมภาพันธ์ พ.ศ. 2554

การผูก TimePicker เข้ากับ Model Data ชนิด Date Time

จากที่ผมเคยนำเสนอ สร้างCJuiDatePicker ใน CActiveForm แบบสวยๆกันดีกว่า



$this->widget('zii.widgets.jui.CJuiDatePicker',array(
'model'=>$model, 'attribute'=>'tumbon', //
'value'=>$model->StartDate,
// additional javascript options for the date picker plugin
'options'=>array(
'showAnim'=>'fold',
'showButtonPanel'=>true,
'autoSize'=>true,
'dateFormat'=>'dd-mm-yy',
'language'=>'th',

),
));





ผมขอนำอีกตัวอย่างมาให้เห็นนะครับ เป็นการเชื่อม(ผูก) TimePicker เข้ากับ Model

         

$this->widget('ext.timepicker.TimePicker', array(
'id'=>'reservationDate',
/*
การผูก TimePicker เข้ากับ Model Data ชนิด Date Time ที่นี้นะครับ ด้านล่าง
กำหนด model เพื่อผูกกับ $model และ name กำหนดว่าผูกกับ Attibute อะไร (StartDate)
เวลาแสดงผลจะแสดงข้อมูลจาก StartDate อัตโนมัติครับ เวลาบันทึกเหมือนกัน ซึ่ง $model เป็นอินสแตนของคลาสที่ถ่ายทอดมากจาก Active Recode เป็นต้น
*/

'model'=>$model, //ชื่อ Model
'name'=>'StartDate', // Attibute ใน Model ครับ
'options'=>array( // ส่วน options เป็นส่วนของคุณสมบัติ TimePicker เช่น
'duration'=>'',
'showTime'=>true, // จะให้แสดงเวลาด้วยใหม
'time24h'=>true, // เวลาจะให้แสดงเป็น 12 หรือ 24 ชั่วโมง
'dateFormat'=>'yy-mm-dd',
'firstDay' => 1,
'stepMinutes'=>5, // ตอนเลื่อนเวลาขึ้นลงให้นับกี่นาที
'showOn'=>'button',
'changeMonth'=>true, // เปลี่ยนเลขเดือนได้ใหม
'changeYear'=>true, // เปลี่ยนเลขปีได้ใหม
),
));


จากโค็ดผมใช้ ext.timepicker.TimePicker นะครับ (http://www.yiiframework.com/extension/timepicker)
สำหรับการแก้ให้แสดงภาษาไทยให้ไปโหลดที่ (http://code.google.com/p/listr/source/browse/trunk/listr/lib/js/ui/i18n/ui.datepicker-th.js?spec=svn26&r=26)

แล้วนำไปวางใน /assets/js/

       

Yii::app()->clientScript->registerScriptFile( $this->assets.'/js/ui.datepicker-thai.js' );




และแก้ไขไฟล์ assets/js/timepicker.js ให้เป็นภาษาไทยครับ

  

html + = "ชั่วโมงนาที";








วันอังคารที่ 15 กุมภาพันธ์ พ.ศ. 2554

การเรียกใช้ Java Script


echo CHtml::button("(+)",array('title'=>"Topic",'onclick'=>js:setTop()));


เป็นการเรียกใช้ function ชื่อ setTop()


อ้างอิง : http://www.yiiframework.com/forum/index.php?/topic/16389-how-to-call-a-java-script-function-onclick-of-a-button/



การนำ Class ที่เราสร้างขึ้นมาเองเอามาใช้กับ Yii Framework ครับ

การนำ Class ที่เราสร้างขึ้นมาเองเอามาใช้กับ Yii Framework เช่น ผมมีคลาสที่ใช้แปลงวันที่ (ตัวอย่าง http://www.thaicreate.com/community/thai-date-format.html) ชื่อคลาส Thaidate.php แนวทางผมเองนะ ท่านใดมีแนวทางดีๆบอกมาด้วยนะครับ


ขั้นตอนของผมมีดังนี้

ขั้นตอนที่ 1. นำคลาส Thaidate.php ไปวางไว้ใน /protected/extensions ครับ
ขั้นตอนที่ 2. ทำการ import คลาสโดยทำการ import ในไฟล์ /protected/config/main.php ดังนี้

// autoloading model and component classes
'import'=>array(
'application.models.*',
'application.components.*',
'application.extensions.*', //เพิ่มตรงนี้แหละครับ ถ้ามีแล้วก็โอเคข้ามได้ 
),


การนำไปใช้ก็ใช้ได้เลยครับ

public function changThai($data, $full=1){

$data = new ThaiDate($data,$full);

$date->getDateTime();

}



วันจันทร์ที่ 14 กุมภาพันธ์ พ.ศ. 2554

ช่วงนี้เป็นช่วงย้ายกลับมาบ้านเดิมครับ

พอดีผมทดลองไปใช้ Wordpress.com ที่ลิ้ง (http://bungkhan.wordpress.com/) รู้สึกว่าตกแต่งลูกเล่นไม่ได้เยอะ แต่ถ้าตัวที่เรา Download มาติดตั้งที่ Host เราเองลูกเล่น plugin เยอะดี (ผมรับทำเว็บไซต์ด้วย wordpress นะครับ ตัวอย่างเอาขึ้นที่ www.bungkhan.com โดยใช้พื้นที่ฟรี howhost.com เอาขึ้นได้ไม่เท่าไหร่เจ็งซ่ะแล้ว หรือว่าเขาหยุดให้บริการฟรีก็มิทราบได้ ว่าจะเข้าไป backup ข้อมูลก็ยังไม่ได้เลย ตอนนี้อยู่ช่วงหา host ใหม่ครับ)

ตอนนี้ผมก็กลัยมายังฐานที่มั่นเดิม โดยนำ Facebook มาช่วยในส่วนของการแสดงความคิดเห็นเพื่อให้เป็นการแชร์เนื้อกันได้ง่ายขึ้น



Yii Dev
เด็กยี้



วันอาทิตย์ที่ 13 กุมภาพันธ์ พ.ศ. 2554

ทดสอบแทรก Code ภาษา PHP และ Java ครับ


public class HelloBlogger {
public static void main(String [] args) {
System.out.println("Hello Blogger!!");
}
}



echo CHtml::activeDropDownList( $model,'statusR',/*ส่วนของการดึงค่ามี*/);

//ส่วนที่ 1.
// $model,'statusR' ก็ Model ที่เราจะต้องการนำค่าไปเก็บ

/*ส่วนของการดึงค่ามี*/
CHtml::listData(Vehicle::model()->findAll(), 'ค่าในรายการของ DropDownList', 'ข้อความที่ต้องการแสดงใน DropDownList'));

//เช่น
echo CHtml::activeDropDownList( $model,'statusR',
CHtml::listData(Vehicle::model()->findAll(),'vehicleID', 'vehicleName'));
);