วันพฤหัสบดีที่ 25 กรกฎาคม พ.ศ. 2562

ํYii2 font color header ใส่สีตัวอักษรในGridview

[
'attribute' => 'send_by',
'header' => 'ผู้ส่งซ่อม',
'headerOptions' => [
'style' => 'color:green'
] ,
'format' => 'raw',
'value' => function($model) {
$id = $model['id'];
$name = $model['send_by'];
return Html::a(Html::encode($name),['class' => 'btn btn-warning']);
}
],

yii2 ปิดการค้นหาแค่บางช่อง SearchModel

ถ้าเราอยากได้ช่องค้นหาแค่บางช่องล่ะ ….. สิ่งที่เราจะทำก็คือไป custom column ที่เราต้องการในที่นี้ขอยกตัวอย่างเป็นคอลัมน์ book_id
<?= GridView::([
    'dataProvider' => $dataProvider,
    'filterModel' => $searchModel,
    'columns' => [
        ['class' => 'yii\grid\SerialColumn'],

        [
            'attribute' => 'book_id', 
            'filter' => false
        ],
        'book_name',
        'price',
        'category_id',

        ['class' => 'yii\grid\ActionColumn'],
    ],
]); ?>
ผลลัพธ์ที่ได้

yii2 ปรับแต่งGridView ข้อความที่ยาว

<?= GridView::widget([
        'dataProvider' => $dataProvider,
        'filterModel' => $searchModel,
        'options' => [
                'style'=>'overflow: auto; word-wrap: break-word;'
        ],
        'columns' => [
            ['class' => 'yii\grid\SerialColumn'],

....

            [
                'attribute'=>'pi_desc',
                'value'=>function ($model) { return $model->pi_desc; },
                'format'=>'raw',
                'label'=>'Desc',
                'contentOptions' => ['style'=>'max-width:300px;'],
            ],

yii2 modal popup

yii2 basicนะครับ index.php
1.<?php Modal::begin([
'id' => 'modal',
'header' => '<h4><a color-blue>CREATE PERMITS</a></h4>',
'size'=>'modal-lg',
'footer' => '<a href="#" class="btn btn-primary" data-dismiss="modal">ปิด</a>',
]);
echo "<div id='modalContent'></div>";
Modal::end();
?>

2.วาง Link:::
<p>
<?= Html::button('เพิ่มรางวัลดีเด่น', ['value'=>Url::to(['awarduload/create']), 'class' =>
'btn btn-danger','id'=>'modalButton']); ?>
</p>
3.ท้ายindex.php
<?php
$this->registerJsFile('@web/js/main.js', ['depends' => [\yii\web\JqueryAsset::className()]]);
?>
4.controller
public function actionCreate()
{
$model = new Awarduload();

if ($model->load(Yii::$app->request->post()) && $model->save()) {
return $this->redirect(['index', 'id' => $model->id]);
} else {
return $this->renderAjax('create', [
'model' => $model,
]);
}
}


https://alcaponpo.wordpress.com/2018/11/03/gridview-click-%E0%B9%81%E0%B8%A5%E0%B9%89%E0%B8%A7%E0%B9%81%E0%B8%AA%E0%B8%94%E0%B8%87-modal-popup/






















































































วันพุธที่ 24 กรกฎาคม พ.ศ. 2562

การใช้งาน BlameableBehavior และ TimestampBehavior ใน Yii2

แก้ปัญหาการจัดการ Timestamp และการบันทึก User ที่ทำการแก้ไขหรือเพิ่มข้อมูลบน Database ด้วย  Yii2 BlameableBehavior และ TimestampBehavior
ผมเชื่อว่าเมื่อก่อน หลาย ๆ คนคงเคยเจอกับความน่ารำคาญในการจัดการกับ Timestamp และการแทรคกิ้งคนที่เข้ามาแก้ไขข้อมูลในฐานข้อมูลผ่านระบบ ต้องมาคอยอัพเตดทุกครั้งมันไม่ใช่เรื่องสนุกแน่ ซึ่ง Framework ใหม่ ๆ ล้วนแต่มีโซลูชั่นในการแก้ปัญหานี้ โดยการทำการบันทึกให้แบบอัตโนมัติ ช่วยให้ Developer สามารถทำงานได้สะดวกขึ้นรวมไปถึง Yii2 ก็เช่นกันครับ
สิ่งที่ Yii2 นำมาช่วยคือ BlameableBehavior และ  TimestampBehavior นั่นเองโดยที่มันจะคอยเชคให้ว่าใครเป็นคนเข้าสู่ระบบเพื่อบันทึกว่าใครเป็นคนแก้ไขหรือเพิ่มข้อมูล และยังอัพเดต Timestamp ให้อัตโนมัติโดยที่เราไม่ต้องทำอะไรเลย

การใช้งาน BlameableBehavior และ TimestampBehavior


การใช้งาน BlameableBehavior และ TimestampBehavior นั้นจะถูกเซตค่าจากใน Model โดยจะต้องทำการ Use เจ้านี่ก่อนเป็นอย่างแรกครับ
อ้อ ในฐานข้อมูลเราจำเป็นต้องมีฟิลด์ที่เก็บข้อมูล Timestamp และผู้จัดการข้อมูลด้วยนะครับ ยกตัวอย่างเช่น
  • created_at ใช้สำหรับบันทึก Timestamp เมื่อมีการเพิ่ม Record ขึ้นมาใหม่
  • updated_at ใช้สำหรับบันทึก Timestamp เมื่อมีการแก้ไขหรือเปลี่ยนแปลงข้อมูล
  • created_by ใช้สำหรับบันทึก Id ข้อผู้ที่สร้าง Record นั้น
  • updated_by ช้สำหรับบันทึก Id ข้อผู้ที่แก้ไขหรือเปลี่ยนแปลงข้อมูลล่คนาสุด
โดยจะต้องทำการเพิ่มฟังก์ชัน behaviors ขึ้นมาก่อนครับ
ในตัวนี้แปะไว้ใน Model ครับ
public function behaviors()
{
return [
[
'class' => TimestampBehavior::className(),
'createdAtAttribute' => 'send_at',
'updatedAtAttribute' => 'updated_at',
'value' => new Expression( 'NOW()' ),
],
[
'class' => BlameableBehavior::className(),
//'createdByAttribute' => 'created_by',
'updatedByAttribute' => 'repair_by',
],

];
}

วันพฤหัสบดีที่ 18 กรกฎาคม พ.ศ. 2562