1111111111111


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

วันจันทร์ที่ 21 มีนาคม พ.ศ. 2554

การแปลงข้อมุลให้เป็นแบบ 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;



ส่วนของ Class Controller ครับ

public function actionGetCar($id){
header('Content-type: application/json');

$car = Cars::model()->findByPK((int)$id);

echo CJSON::encode($car);

Yii::app()->end();
}

เวลาเรียกดูข้อมูลก็ประมาณ /index.php/cars/getcar?id=3 หรือ /cars/getcar/id/3 (แล้วแต่การตกแต่ง Url manaeger ครับ)
ผลลัพท์ที่ได้ก็จะเป็นเช่นฉะนี้

{"id":"3","dealer_id":"6","name":"honda"}







ผมคิดว่าในอนาคตเดียวเอาไปประยุกต์ใช้กับ Data Grid สวยๆ เช่น flexigrid.info ได้



อ้างอิง : http://learnyii.blogspot.com/2010/12/very-simple-json-api.html



วันจันทร์ที่ 14 มีนาคม พ.ศ. 2554

CButtonColumn หรือ ปุ่มที่เราเห็นกันตาม Grid view ครับ

CButtonColumn หรือ ปุ่มที่เราเห็นกันตาม Grid view



เช่น Delete view ครับ เรามาดูการตกแต่งปุ่มเบื้องต้นกันเถอะ
จาก


'buttonID' => array(
'label'=>'...', // ข้อความที่จะให้ปรากฏบนปุ่ม
'url'=>'...', // ลิ้ง Url
'imageUrl'=>'...', // ภาพที่ต้องการแสดง
'options'=>array(...), // HTML options สำหรับปุ่ม
'click'=>'...', // เมื่อกดจะให้ทำอะไร
'visible'=>'...', // กำหนดการเข้าถึงปุ่ม เช่นเฉพาะผู้ดูแลระบบเท่านั้น
)



(ตัวอย่าง) การใช้ Yii และ Active Record ครับ

(ตัวอย่าง) การใช้ Yii และ Active Record ครับ


โดยมีตารางดังนี้

ตาราง thai_district เก็บข้อมูลอำเภอ
ตาราง thai_province เก็บข้อมูลชื่อจังหวัด
ตาราง thai_slogan เก็บข้อมูลคำขวัญประจำจังหวัด และดอกไม้ประจำจังหวัด
โดยมีเงื่อนไขคือ 1 จังหวัดมี หลาย อำเภอ (ONE TO MANY) และ 1 จังหวัด มี 1 คำขวัญประจำจังหวัด (ONE TO ONE)




ตัวอย่าง :



ตัวอย่างการใช้ 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',
),
));




อ้างอิง : http://www.eha.ee/labs/yiiplay/index.php/en/person/view?id=1
อ้างอิง : http://www.yiiframework.com/doc/api/1.1/CDetailView/
อ้างอิง : http://www.yiiframework.com/doc/api/1.1/CFormatter



วันพุธที่ 2 มีนาคม พ.ศ. 2554

ลายตากับ 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
.....
.....
));


สังเกตุบรรทัดที่ 2. ผมใช้ 'id'=>'gridLoanID', ดังนั้นในไฟล์ css (screen.css) เราก็ใช้ #gridLoanID ดังนี้

#gridLoanID table.items tr:hover
{
background: #ECFBD4;
}


และถ้าอีกขั้นเนื่องจากแถวผมมี 2 แบบคือแถวรายชื่อนักเรียนที่ได้รับการอนุมัติทุน (row-commit) กับยังไม่ได้รับการอนุมัติทุน (row-wait) สังเกตุว่าผมกำหนดข้อมูลในส่วน rowCssClassExpression ดังนี้


....
....
'rowCssClassExpression'=>'$data->statusR=="อนุมัติ"?"row-commit":"row-wait"', //ถ้าไม่ใช้ก็เอาออกได้เลยครับ
....
....



วันอังคารที่ 1 มีนาคม พ.ศ. 2554

สำหรับท่านที่ต้องการอยากทดสอบ 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



วันอาทิตย์ที่ 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



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



วันจันทร์ที่ 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



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

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

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


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


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



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

การนำ 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
เด็กยี้