"บัณฑิต...นั้นแปลว่า ผู้รู้...
แต่กูนั้น ไม่ค่อยรู้...
รู้เพียงนิดหน่อย ในทางพระพุทธศาสนา...
กูรู้เพียงว่า บาปมีจริง บุญมีจริง กูก็รู้เพียงแค่นี้"
หลวงพ่อคุณ
ผมขอคัดลอกมาจาก ท่านพระอาจารย์สุพันธ์ แก้วมงคล

กูรู้เพียงว่า บาปมีจริง บุญมีจริง กูก็รู้เพียงแค่นี้
ใครอยากเป็นตำรวจยกมือขึ้น
ส่วนนี้ผมใช้เป็นหน้าในการรวมข้อมูลการสอบตำรวจ ประจำปี 2554 นะครับ
สำหรับ เรื่อง รับสมัครและสอบแข่งขันบุคคลภายนอกผู้มีวุฒิปริญญาตรีเพื่อบรรจุและแต่งตั้ง เข้ารับราชการเป็นข้าราชการตำรวจชั้นสัญญาบัตร ประจำปี พ.ศ.๒๕๕๔ ของ สำนักงานเทคโนโลยีสารสนเทศและการสื่อสาร
รายละเอียดการสอบดูได้ที่ http://www.itc.police.go.th/
ถ้าผมมีข้อมูลอะไรเดียวจะเอามาฝาก แต่ตอนนี้ขอตั้งประเดินไว้ก่อน
การแปลงข้อมุลให้เป็นแบบ JSON อย่างง่าย
JSON คือ ?
ตัวอย่างตารางในฐานข้อมูล
CREATE TABLE IF NOT EXISTS `tbl_cars` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`dealer_id` int(11) NOT NULL,
`name` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
public function actionGetCar($id){
header('Content-type: application/json');
$car = Cars::model()->findByPK((int)$id);
echo CJSON::encode($car);
Yii::app()->end();
}
CButtonColumn หรือ ปุ่มที่เราเห็นกันตาม Grid view ครับ
CButtonColumn หรือ ปุ่มที่เราเห็นกันตาม Grid view
เช่น Delete view ครับ เรามาดูการตกแต่งปุ่มเบื้องต้นกันเถอะ
จาก
'buttonID' => array(
'label'=>'...', // ข้อความที่จะให้ปรากฏบนปุ่ม
'url'=>'...', // ลิ้ง Url
'imageUrl'=>'...', // ภาพที่ต้องการแสดง
'options'=>array(...), // HTML options สำหรับปุ่ม
'click'=>'...', // เมื่อกดจะให้ทำอะไร
'visible'=>'...', // กำหนดการเข้าถึงปุ่ม เช่นเฉพาะผู้ดูแลระบบเท่านั้น
)
(ตัวอย่าง) การใช้ Yii และ Active Record ครับ
ตัวอย่างการใช้ CDetailView ครับ
ตัวอย่างการใช้ CDetailView ครับ
$this->widget('zii.widgets.CDetailView', array(
'data'=>$model,
'attributes'=>array(
array(
'name'=>'id', // แสดงเฉพาะผู้ดูแลลระบบเท่านั้น
'visible'=>Yii::app()->user->name=='admin'? true : false,
),
'firstname',
'lastname',
'birthyear',
'email:email',
'webpage:url', // กำหนดโดยใช้รูปแบบ CFormatter
'description:html', // แสดงแบบภาษา HTML เช่น ถ้ามี สวัสดี ก็จะเป็นตัวหนา
array(
'name'=>'travelDate', 'cssClassExpression' =>'gridD', 'type'=>'raw',
'value'=> 'DateThai($data->travelDate)', //เรียกใช้ Function อื่นๆ
),
array( // แสดงแบบลิ้งครับ
'label'=>'City',
'type'=>'raw',
'value'=>CHtml::link(CHtml::encode($model->city->name),
array('city/view','id'=>$model->city->id)),
),
array(
'name'=>'country_id',
'value'=>$model->country->name, // เรียกดูค่าใน Model อื่นๆ
),
array(
'name'=>'eyecolor_code',
'value'=>Lookup::item('eyecolor',$model->eyecolor_code),
),
'registered',
),
));
เอี๋ยนหุยใฝ่ศึกษา มีคุณธรรมงดงาม เป็นศิษย์รักของขงจื้อ

เอี๋ยนหุยใฝ่ศึกษา มีคุณธรรมงดงาม เป็นศิษย์รักของขงจื้อ มีอยู่วันหนึ่ง เอี๋ยนหุยออกไปทำธุระที่ตลาด เห็นผู้คนจำนวนมากห้อมล้อมอยู่ที่หน้าร้านขายผ้า จึงเข้าไปสอบถามดู จึงรู้ว่าเกิดการพิพาทระหว่างคนขายผ้ากับลูกค้า ได้ยินลุกค้าตะโกนเสียงดังโหวกเหวกว่า "3x8ได้ 23 ทำไมท่านถึงให้ข้าจ่าย24เหรียญล่ะ!"
เอี๋ยนหุยจึงเดินเข้าไปที่ร้าน หลังจากทำความเคารพแล้ว ก็กล่าวว่า "พี่ชาย 3x8 ได้ 24 จะเป็น 23 ได้ยังไง? พี่ชายคิดผิดแล้ว ไม่ต้องทะเลาะกันหรอก"
คนซื้อผ้าไม่พอใจเป็นอย่างยิ่ง ชี้หน้าเอี๋ยนหุยและกล่าวว่า "ใครให้เจ้าเข้ามายุ่ง! เจ้าอายุเท่าไหร่กัน! จะตัดสินก็มีเพียงท่านขงจื้อเท่านั้น ผิดหรือถูกมีท่านผู้เดียวที่ข้าจะยอมรับ ไป ไปหาท่านขงจื้อกัน "
เอี่ยนหุยกล่าวว่า "ก็ดี หากท่านขงจื้อบอกว่าท่านผิด ท่านจะทำอย่างไร?"
คนซื้อผ้ากล่าวว่า"หากท่านวินิจฉัยว่าข้าผิด ข้ายอมให้หัวหลุดจากบ่า! แล้วหากเจ้าผิดล่ะ?"
เอี๋ยนหุยกล่าวว่า "หากท่านวินิจฉัยว่าข้าผิด ข้ายอมถูกปลดหมวก(ตำแหน่ง)"
ลายตากับ Mouse Over แล้วแถวเปลี่ยนสี ถ้างั้นมากำหนดสีพื้นให้กับ CgridView กันเถอะ
พอดีมี user คนมีอายุบอกผมให้เอาการการเปลี่ยนสีให้กับ CgridView ออก เพราะแกลายตา (ประมาณเอาเมาส์ไปวางใน CgridView ให้พื้นหลังแถวที่มีเมาส์วางอยู่บนแถวเป็นอีกสี Mouse Over) จึงไม่อยากให้เปลี่ยนสี ผมก็ไปปรึกษาโนบิตะได้ผลดังนี้ครับ
จาก
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'gridLoanID',
'dataProvider'=>$model->searchGrid(),
'filter'=>$model,
'rowCssClassExpression'=>'$data->statusR=="อนุมัติ"?"row-commit":"row-wait"',
'columns'=>array(
.....
.....
'loanName', 'studentName'
.....
.....
), // end of columns
.....
.....
));
#gridLoanID table.items tr:hover
{
background: #ECFBD4;
}
....
....
'rowCssClassExpression'=>'$data->statusR=="อนุมัติ"?"row-commit":"row-wait"', //ถ้าไม่ใช้ก็เอาออกได้เลยครับ
....
....
สำหรับท่านที่ต้องการอยากทดสอบ Yii framework ครับ
สำหรับท่านที่ต้องการอยากทดสอบ Yii framework ครับ
ตัวอย่างอยู่ที่ http://chawdoy.thport.com/thai/
แหล่งโหลดตัวอย่าง http://www.mediafire.com/?djr7u6ilnd6j5rw
ไฟล์ chawdoy.sql อยู่ในแพคแล้วนะครับ
ขั้นตอนติดตั้ง Copy ไปวางใน root ครับ
เช่น ผมติดตั้ง xampp ที่ c:\ ก็หาโฟล์เดอล์ htdocs
C:\xampp\htdocs
แล้วเอา ทั้งใน zip ไฟล์ไปวาง
C:\xampp\htdocs\framework
C:\xampp\htdocs\thai
หลังจาก start apache แล้วเวลาเรียกก็
http://127.0.0.1/thai
แนะนำเว็บที่เขานำเสนอข้อมุลเกี่ยวกับการพัฒนาเว็บด้วย 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/
โปรแกรมเมอร์คนไทยแต่ชอบมีปัญหากับวันที่ภาษาไทย
หรือว่าผมแก่แล้วก็ไม่รู้นอนไม่ค่อยหลับครับ บังคับตัวเองนอนก็ใช้การไม่ได้ (ไม่หลับ) ใหนๆก็ไม่หลับ โปรแกรมที่รับมาพัฒนาก็ส่งงานเสร้จแล้ว ก็เลยมานั่งเขียน 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
ทำไมต้องยอมแพ้ มนุษย์ขี้เหม็น (ขี้ตนเองตมทุกวันไม่พูดอะไร แต่ตดคนอื่นบอกว่าเหม็น)
ชายคนหนึ่งเพิ่งจะมาพูดได้ ตอนอายุ 4 ขวบ
ชายคนนั้น...เพิ่งจะมาอ่านหนังสือออกตอนอายุ 8 ขวบ
ชายคน นั้น...เคยถูกไล่ออกจากโรงเรียน
ชายคนนั้น...เคยถูกปฎิเสธจากโรงเรียนอาชีวะ แห่งซูริค
ชายคนนั้น...เคยถูกอาจารย์ระบุว่า "สมองช้า
ไม่ชอบสังคมและ ล่องลอยอยู่ในความฝันอันโง่เขลาของตัวเองตลอดเวลา"
ชายคนนั้น...ชื่อ "อัลเบิร์ต ไอสไตน์" บิดาแห่งปรมาณู 
----------------------------------------------------------------
ชายคนหนึ่ง หลงใหลในคอมพิวเตอร์อย่างมาก
ชายคนนั้น...ชอบหมกตัวกับ คอมพิวเตอร์เป็นเวลานานๆ
ชายคนนั้น...ถูกเพื่อนมองว่า "สกปรก - บ้า คอมพิวเตอร์"
ชายคนนั้น...เคยเสนอซอฟแวร์ระบบให้กับ แอปเปิ้ล คอมพิวเตอร์
ชายคนนั้น...ถูกปฎิเสธอย่างไม่ใยดี
ชายคนนั้น...ปัจจุบัน คือผู้ให้การช่วยเหลือด้านเงินทุนกับ แอปเปิ้ลคอมพิวเตอร์
ชายคนนั้น...เคย ถูก ไอบีเอ็ม มองว่า "แค่เด็ก"
ชายคนนั้น...ปัจจุบันเป็นผู้นำบริษัทซอฟแวร์ ที่ทรงอิทธิพลมากที่สุดในโลก
ชายคนนั้น...ชื่อ วิลเลี่ยม เฮนรี่ เกตส์ ที่ สาม หรือที่รู้จักกันในนาม
"บิลล์ เกตส์" ผู้ก่อตั้งไมโครซอฟต์ มหาเศรษฐี อันดับหนึ่งของโลก
ผู้ถือครองสินทรัพย์กว่า 46,000 ล้านเหรียญ
การเพิ่มข้อมูล 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';
}
}
การใช้ distinct (ของคำสั่ง SQL) ในคำสั่ง findAll()
ก่อนอื่นต้องขอทบทวนก่อนว่า distinct (ของคำสั่ง SQL) คือ คำสั่งที่ตัดค่าที่ซ้ำกันออกไป
การนำมาใช้ใน findAll() หรือ find*() (* หมายถึงอื่นๆนะครับ เช่น find(), findAll(), findByPk(), findAllByPk(), findByAttributes(), findAllByAtributes())
....
....
$models=Thai::model()->findAll(array(
'select'=>'province',
'distinct'=>true,
));
....
....
....
....
$criteria=new CDbCriteria;
$criteria->distinct = true;
$criteria->compare('province', $this->province, true);
$criteria->order ='province DESC, ampur ASC';
....
....
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'); ?>
?php>?php>?php>?php>
labelEx($acl,'userName'); ?>
textField($acl,'userName',array('size'=>20,'maxlength'=>25)); ?>
error($acl,'userName'); ?>
?php>?php>?php>?php>
......
?php>?php>
การเรียกใช้เมนูตามสิทธิที่ได้ (ช่วงนี้เมืองไทยเรียกร้องสิทธิกันบ่อยต้องอินเทรนหน่อย)
การเรียกใช้เมนูตามสิทธิที่ได้ หมายถึงแสดงเมนูตามที่สิทธิของ 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('*'),
),
);
}
.....
.....
}
array('allow',
'actions'=>array('view','create','update','index','print','report','department'),
'users'=>array('admin'),
),
ตัวอย่างการค้นหาข้อมูลที่ส่งมาครับ
ตัวอย่างการค้นหาข้อมูลที่ส่งมาครับ
เช่นการค้นหา พนักงาน (Emplotee) ที่สังกัดคณะที่มี รหัlคณะ(facultyID) เท่ากับ ค่าที่ส่งมา $_GET['facultyID']
$client= Emplotee::model()->findByPk($_GET['facultyID']);
พอดีไปเจอมา การใส่ปุ่มใน 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),
),
การผูก 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',
),
));
$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, // เปลี่ยนเลขปีได้ใหม
),
));
Yii::app()->clientScript->registerScriptFile( $this->assets.'/js/ui.datepicker-thai.js' );
html + = ""; ชั่วโมง นาที
