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

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

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

ดูแล้ว 6,870 ครั้ง


สำหรับเนื้อหาต่อไปนี้ จะเป้นการประยุกต์สร้างเมนูให้รองรับหลายภาษาในโปรเจ็ค
codeigniter โดยขออธิบายแทรกไปกับสว่นของเนื้อหาตามลิ้งค์ด้านล่าง
 
ประยุกต์ routing จัดการ URL ร่วมกับ controllers สำหรับหน้าเว็บไซต์หลัก 
 
จากลิ้งค์ข้างต้น เป็นการสร้างหน้าเพจสำหรับโปรเจ็ค 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>
&nbsp; &nbsp;
<a href="<?=base_url("lang/th")?>">TH</a>
 
 
กรณี้เนื้อหาส่วนอื่นที่ดึงจากฐานข้อมูล เราก็สามารถใช้ตัวแปรที่ชื่อ $ck_lang_val
ที่เราส่งมา ใช้เป็นเงื่อนไขในการแสดงและดึงข้อมูลได้ ขึ้นกับการประยุกต์เพิ่มเติม
 


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











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





คำแนะนำ และการใช้งาน

สมาชิก กรุณา ล็อกอินเข้าระบบ เพื่อตั้งคำถามใหม่ หรือ ตอบคำถาม สมาชิกใหม่ สมัครสมาชิกได้ที่ สมัครสมาชิก


  • ถาม-ตอบ กรุณา ล็อกอินเข้าระบบ
  • เปลี่ยน


    ( หรือ เข้าใช้งานผ่าน Social Login )







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