สำหรับเนื้อหาต่อไปนี้ จะเป้นการประยุกต์สร้างเมนูให้รองรับหลายภาษาในโปรเจ็ค
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
ที่เราส่งมา ใช้เป็นเงื่อนไขในการแสดงและดึงข้อมูลได้ ขึ้นกับการประยุกต์เพิ่มเติม