แนวทางการใช้งาน เมนูหลายภาษาในโปรเจ็ค codeigniter อย่างง่าย

เขียนเมื่อ 9 ปีก่อน โดย Ninenik Narkdee
codeigniter codeigniter 3

คำสั่ง การ กำหนด รูปแบบ ตัวอย่าง เทคนิค ลูกเล่น การประยุกต์ การใช้งาน เกี่ยวกับ codeigniter codeigniter 3

ดูแล้ว 7,091 ครั้ง


สำหรับเนื้อหาต่อไปนี้ จะเป้นการประยุกต์สร้างเมนูให้รองรับหลายภาษาในโปรเจ็ค
codeigniter โดยขออธิบายแทรกไปกับสว่นของเนื้อหาตามลิ้งค์ด้านล่าง
 
ประยุกต์ routing จัดการ URL ร่วมกับ controllers สำหรับหน้าเว็บไซต์หลัก 
 
จากลิ้งค์ข้างต้น เป็นการสร้างหน้าเพจสำหรับโปรเจ็ค codeigniter
ประกอบด้วยหน้า Home ,About Us,Service และ Contact Us โดยจะมีส่วนของเมนูด้านบน
เพื่อลิ้งค์ไหน้าต่างๆ ดังนี้

1
2
3
4
5
6
7
<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
 
1
2
3
4
5
6
<?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
 
1
2
3
4
5
6
<?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
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?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
 
1
2
3
4
5
public function __construct()
{
        parent::__construct();
        $this->load->helper('cookie');           
}
 
จากนั้นสร้างเงื่อนไขการเรียกไฟล์ en.php และ th.php ดังนี้
 
1
2
3
4
5
6
7
8
9
// เก็บค่าตัวแปร 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 แบบเต็ม
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?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 ไว้มา
แทนข้อความที่เราต้องการ จากตัวแปรและข้อความด้านบน เราจะกำหนดในส่วนของเมนู
ด้านบน จะได้เป็นดังนี้
 
1
2
3
4
5
6
7
<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>
 
จะได้เป้น
 
1
2
3
4
5
6
7
<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
โดยมีรูแบบโค้ดตามด้านล่าง ดังนี้
 
  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?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 สำหรับภาษาอังกฤษ
เช่น
 
1
2
3
<a href="<?=base_url("lang/en")?>">EN</a>
&nbsp; &nbsp;
<a href="<?=base_url("lang/th")?>">TH</a>
 
 
กรณี้เนื้อหาส่วนอื่นที่ดึงจากฐานข้อมูล เราก็สามารถใช้ตัวแปรที่ชื่อ $ck_lang_val
ที่เราส่งมา ใช้เป็นเงื่อนไขในการแสดงและดึงข้อมูลได้ ขึ้นกับการประยุกต์เพิ่มเติม
 


กด Like หรือ Share เป็นกำลังใจ ให้มีบทความใหม่ๆ เรื่อยๆ น่ะครับ











URL สำหรับอ้างอิง










เว็บไซต์ของเราให้บริการเนื้อหาบทความสำหรับนักพัฒนา โดยพึ่งพารายได้เล็กน้อยจากการแสดงโฆษณา โปรดสนับสนุนเว็บไซต์ของเราด้วยการปิดการใช้งานตัวปิดกั้นโฆษณา (Disable Ads Blocker) ขอบคุณครับ