หมวดหมู่: Yii 2

YII2: GRUD GRID FROM หลายภาษาYII2: GRUD GRID FROM หลายภาษา

จากเรื่องที่แล้ว ทำตาราง yii 2 ให้เก็บหลายภาษา โดยเราสามารถอ้างถึง attribute ตามรูปแบบ {attribute name}_{language} เช่น ในตาราง _lang ฟิลย์ชื่อ name ก็ใช้ $model->name_en, $model->name_jp, $model->name_th ในวิวถ้าต้องการแสดงผล

ในบทความที่ยังขาดตัวอย่างในการแสดงข้อมูล การใช้ในกริดที่แสดงรายการทั้งหมด, ฟอร์มที่จะกรอกข้อมูล และวิวที่จะแสดงสิ่งที่เราเก็บเอาไว้ออกมา ตัวอย่าง code ที่ผมใช้

GridView ต้องการให้แสดงภาษาอังกฤษเป็นหลัก อีกช่องที่เหลือแสดงสลับกันระหว่างภาษาไทย และญี่ปุ่น ทำได้โดยแทนที่จะอ้าง name_th หรือ name_jp ตรง ๆ ก็อ้างผ่านตัวแปรไปแทน

... if (Yii::$app->language == 'jp') { $name = 'name_jp';
}
else
{ $name = 'name_th';
}
...
echo GridView::widget ([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [ ['class' => 'yii\grid\SerialColumn'],
... 'name_en', $name,
... 'post_id', 'status',
],
]) ;
...

form ก็สามารถใช้เหมือนรูบแบบปกติได้เลย โดยเราสามารถกรอกข้อมูล แก้ไขตัวแปลภาษาทั้งหมดได้พร้อมกันในครั้งเดียว เช่น

...
<?= $form->field ($model, 'name_en') ->textInput () ?>
<?= $form->field ($model, 'name_jp') ->textInput () ?>
<?= $form->field ($model, 'name_th') ->textInput () ?>
...

วิวก็ตามรูปแบบเหมือนตัวอื่น ๆ ตามปกติ

...
<?= DetailView::widget ([ 'model' => $model, 'attributes' => [ 'post_id', 'status',
... 'name_en', 'name_jp', 'name_th',
... 'date_publish', 'date_expire', 'log_created', 'log_created_by', 'log_updated', 'log_updated_by', ], ]) ?>
...