สำหรับเนื้อหาต่อไปนี้ จะเป้นการประยุกต์สร้างเมนูให้รองรับหลายภาษาในโปรเจ็ค
codeigniter โดยขออธิบายแทรกไปกับสว่นของเนื้อหาตามลิ้งค์ด้านล่าง
ประยุกต์ routing จัดการ URL ร่วมกับ controllers สำหรับหน้าเว็บไซต์หลัก
https://www.ninenik.com/content.php?arti_id=680 via @ninenik
จากลิ้งค์ข้างต้น เป็นการสร้างหน้าเพจสำหรับโปรเจ็ค codeigniter
ประกอบด้วยหน้า Home ,About Us,Service และ Contact Us โดยจะมีส่วนของเมนูด้านบน
เพื่อลิ้งค์ไหน้าต่างๆ ดังนี้
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> <ul class="nav navbar-nav"> <li><a href="<?=base_url('home')?>">Home</a></li> <li><a href="<?=base_url('aboutus')?>">About Us</a></li> <li><a href="<?=base_url('service')?>">Service</a></li> <li><a href="<?=base_url('contactus')?>">Contact Us</a></li> </ul>
เริ่มต้นให้สร้างโฟลเดอร์ชื่อ lang ไว้ใน apps > views ตามรูป
จากนั้นให้สร้างไฟล์ en.php และ th.php ไว้ในโฟลเดอร์ lang สำหรับใช้กำหนดตัวแปร เก็บค่าคงที่ตัวแปร
ที่ต้องการ ในที่นี้เราจะทำแค่ 4 ข้อความขอเมนูด้านบน จะได้โค้ดไฟล์ดังนี้
th.php
<?php /////// Top menu /////////// define("_top_menu_home_text","หน้าแรก"); define("_top_menu_aboutus_text","เกี่ยวกับเรา"); define("_top_menu_service_text","บริการของเรา"); define("_top_menu_contactus_text","ติดต่อเรา");
en.php
<?php /////// Top menu /////////// define("_top_menu_home_text","Home"); define("_top_menu_aboutus_text","About Us"); define("_top_menu_service_text","Services"); define("_top_menu_contactus_text","Contact Us");
เมือเสร็จในส่วนของการกำหนดภาษาข้างต้นแล้ว ต่อไปจะมาดูส่วนของการเรียกใช้
ให้เราเปิดไฟล์ apps > controllers > Pages.php
<?php defined('BASEPATH') OR exit('No direct script access allowed'); class Pages extends CI_Controller { public function __construct() { parent::__construct(); } public function index($web_pages="home",$action=null,$id=null) { $data['title'] = ucfirst($web_pages); $data['title_h1'] = ucfirst($web_pages); $data['action'] = $action; $data['id']=$id; $file_model=APPPATH.'/models/'.ucfirst($web_pages).'_model.php'; if(file_exists($file_model)) { $this->load->model($web_pages.'_model'); } $this->load->view('templates/header', $data); $this->load->view('pages/'.$web_pages,$data); $this->load->view('templates/footer'); } }
เนื่องจากเราต้องการใช้งาน cookie เพื่อเก็บค่าตัวแปร ภาษาที่ต้องการแสดง เราต้องการการเนียกใช้
cookie โดยเพิ่มคำสั่งนี้เข้าไปในส่วนของ function __construct
public function __construct() { parent::__construct(); $this->load->helper('cookie'); }
จากนั้นสร้างเงื่อนไขการเรียกไฟล์ en.php และ th.php ดังนี้
// เก็บค่าตัวแปร cookie ภาษา $ck_lang_val=get_cookie('ck_lang_val'); // ส่งค่าไปใช้ในไฟล์เนื้อหา $data['ck_lang_val']=$ck_lang_val; if($ck_lang_val!=""){ // ถ้าไม่ใช่ค่าว่าง $this->load->view('lang/'.$ck_lang_val); }else{ // ถ้าไม่มีค่า หรือเป็นค่าว่าง ให้แสดงภาษาไทย $this->load->view('lang/th'); }
โค้ดไฟล์ Pages.php แบบเต็ม
<?php defined('BASEPATH') OR exit('No direct script access allowed'); class Pages extends CI_Controller { public function __construct() { parent::__construct(); $this->load->helper('cookie'); } public function index($web_pages="home",$action=null,$id=null) { $data['title'] = ucfirst($web_pages); $data['title_h1'] = ucfirst($web_pages); $data['action'] = $action; $data['id']=$id; $file_model=APPPATH.'/models/'.ucfirst($web_pages).'_model.php'; if(file_exists($file_model)) { $this->load->model($web_pages.'_model'); } // เก็บค่าตัวแปร cookie ภาษา $ck_lang_val=get_cookie('ck_lang_val'); // ส่งค่าไปใช้ในไฟล์เนื้อหา $data['ck_lang_val']=$ck_lang_val; if($ck_lang_val!=""){ // ถ้าไม่ใช่ค่าว่าง $this->load->view('lang/'.$ck_lang_val); }else{ // ถ้าไม่มีค่า หรือเป็นค่าว่าง ให้แสดงภาษาไทย $this->load->view('lang/th'); } $this->load->view('templates/header', $data); $this->load->view('pages/'.$web_pages,$data); $this->load->view('templates/footer'); } }
ต่อไปก็ส่วนของการดึงค่าตัวแปรมาแสดง ให้เรานำค่าตัวแปรที่กำหนด define ไว้มา
แทนข้อความที่เราต้องการ จากตัวแปรและข้อความด้านบน เราจะกำหนดในส่วนของเมนู
ด้านบน จะได้เป็นดังนี้
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> <ul class="nav navbar-nav"> <li><a href="<?=base_url('home')?>">Home</a></li> <li><a href="<?=base_url('aboutus')?>">About Us</a></li> <li><a href="<?=base_url('service')?>">Service</a></li> <li><a href="<?=base_url('contactus')?>">Contact Us</a></li> </ul>
จะได้เป้น
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> <ul class="nav navbar-nav"> <li><a href="<?=base_url('home')?>"><?=_top_menu_home_text?></a></li> <li><a href="<?=base_url('aboutus')?>"><?=_top_menu_aboutus_text?></a></li> <li><a href="<?=base_url('service')?>"><?=_top_menu_service_text?></a></li> <li><a href="<?=base_url('contactus')?>"><?=_top_menu_contactus_text?></a></li> </ul>
ทดสอบเรียกไฟล์โปรเจ็คของเรา ผ่าน url
http://localhost/lernci/
จะได้ผลลัพธ์ดังรูป
จะเห็นว่าเมนูด้านบนจะแสดงเป็นภาษาไทยเป็นค่าเริ่มต้นนั่นเอง
และยังไม่มีการกำหนดค่าตัวแปร cookie ที่ชื่อ ck_lang_val
ต่อไปให้เราสร้างไฟล์ Lang.php ในโฟลเดอร์ apps > controllers เพื่อใช้ในการกำหนดค่า cookie
โดยมีรูแบบโค้ดตามด้านล่าง ดังนี้
<?php defined('BASEPATH') OR exit('No direct script access allowed'); class Lang extends CI_Controller { public function __construct() { parent::__construct(); $this->load->helper('cookie'); // ใช้งาน cookie $this->load->library('user_agent'); // ใช้งาน user agent เพื่อลิ้งค์กลับหน้าเดิมที่กดเข้ามา } public function en() { // .ninenik.com ให้กำหนดเป็น domain ของเรา ถ้าทดสอบที่เครื่อง localhost ให้ปล่อยเป้นค่าว่าง set_cookie('ck_lang_val','en',time()+(24*60*60),'.ninenik.com','/'); $previous_url = $this->agent->referrer(); redirect($previous_url); } public function th() { // .ninenik.com ให้กำหนดเป็น domain ของเรา ถ้าทดสอบที่เครื่อง localhost ให้ปล่อยเป้นค่าว่าง set_cookie('ck_lang_val','th',time()+(24*60*60),'.ninenik.com','/'); $previous_url = $this->agent->referrer(); redirect($previous_url); } }
ส่วนสุดท้ายก็คือปุ่มหรือลิ้งค์ที่เราจะกำหนดตัวแปร cookie เมื่อคลิกเลือก
ในที่นี้เราจะทำเป็นปุ่มตัวอักษรง่ายๆ หรือใครจะประยุกต์ใช้เป็นรูปภาพธงชาติก็ได้เหมือนกัน
รูปแบบก็ง่าย ลิ้งค์ไปยังหน้า lang/th สำหรับภาษาไทย และ lang/en สำหรับภาษาอังกฤษ
เช่น
<a href="<?=base_url("lang/en")?>">EN</a> <a href="<?=base_url("lang/th")?>">TH</a>
กรณี้เนื้อหาส่วนอื่นที่ดึงจากฐานข้อมูล เราก็สามารถใช้ตัวแปรที่ชื่อ $ck_lang_val
ที่เราส่งมา ใช้เป็นเงื่อนไขในการแสดงและดึงข้อมูลได้ ขึ้นกับการประยุกต์เพิ่มเติม