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