คู่มือการใช้งาน CodeIgniter เวอร์ชั่น 1.7.2


Views (ส่วนแสดง)

View หรือส่วนแสดง เป็นหน้าเว็บแบบทั่วไป หรืออาจจะเป็นส่วนต่างๆของหน้าเว็บเพจ อย่างเช่น ส่วนหัว, ส่วนท้าย, แถบด้านข้าง, หรืออื่นๆ อันที่จริง view (ส่วนแสดง) ตัวมันสามารถที่จะฝัง(เป็นส่วนประกอบ) ไว้ใน view (ส่วนแสดง) อื่นได้ ถ้าคุณต้องการแบบลักษณะเป็นโครงสร้างลำดับชั้น

View (ส่วนแสดง) จะไม่ถูกเรียกโดยตรงๆ แต่ controller (ตัวควบคุม) จะเป็นตัวเรียก จำไว้ว่าเรามีแนวคิดแบบ MVC , Controller (ตัวควบคุม)เหมือนกับเป็นตำรวจจราจร ซึ่งมันจะทำหน้าที่ตอบสนองโดยการดึง view (ส่วนแสดง) ถ้าคุณยังไม่ไ่ด้อ่านเนื้อหาของ Controllers คุณต้องอ่านก่อนเลย ก่อนที่จะไปต่อ

ใช้ตัวอย่างในบท controller (ตัวควบคุม)ของคุณ แล้วเพิ่ม view (ส่วนแสดง)เข้าไป

สร้าง View (ส่วนแสดง)

ใช้เท็กซ์เอดิเตอร์ของคุณ ส้รางไฟล์ blogview.php แล้วนำโค้ดข้างล่างนี้ไปใส่:

แล้วบันทึกไว้ในโฟลเดอร์ application/views/

โหลด View (ส่วนแสดง)

เพื่อที่จะโหลด view (ส่วนแสดง) เฉพาะเจาะจง คุณควรใช้ฟังก์ชันข้างล่างนี้:$this->load->view('name');

name เป็นชื่อของไฟล์ view (ส่วนแสดง) ของคุณ
หมายเหตุ: ส่วนขยาย .php ไม่ต้องระบุลงไปด้วย แม้คุณจะใช้นามสกุลอื่นนอกเหนือจาก .php ก็ตาม ก็ไม่ต้องระบุไป

เปิดไฟล์ controller (ตัวควบคุม)ที่คุณได้สร้างไว้ก่อนหน้านี้ blog.php แล้วแทนด้วยชื่อ view (ส่วนแสดง) ที่คุณจะทำการโหลด ดังนี้:

ถ้าคุณเรียกดูหน้าที่คุณได้ทำข้างต้น คุณจะเห็น view (ส่วนแสดง)อันใหม่ URL ที่ใช้เรียกดูจะมีหน้าตาแบบนี้:example.com/index.php/blog/

โหลด view (ส่วนแสดง) แบบหลายตัว

CodeIgniter มีความอัจฉริยะในการจัดการการเรียกแบบหลายๆตัว (การเรียก view (ส่วนแสดง)พร้อมกัน ถ้ามีหลายตัวถูกเรียกพร้อมกันมันก็จะถูกเพิ่มเข้าไปด้วยกัน ตัวอย่าง คุณมี view (ส่วนแสดง)ส่วนหัว, view (ส่วนแสดง)เมนู, view (ส่วนแสดง)เนื้อหา, และ view (ส่วนแสดง)ส่วนท้าย รูปแบบการเรียกจะเป็นลักษณะนี้:

<?php

class Page extends Controller {

   function index()
   {
      $data['page_title'] = 'Your title';
      $this->load->view('header');
      $this->load->view('menu');
      $this->load->view('content', $data);
      $this->load->view('footer');
   }

}
?>

ตัวอย่างข้างบนนั้นเราใช้การเพิ่มข้อมูลแบบพลวัติ(เปลี่ยนแปลงอยู่ตลอดเวลา), ซึ่งจะเห็นในข้างล่างต่อไปนี้

เก็บ view (ส่วนแสดง)ไว้ในโฟลเดอร์ย่อย

view (ส่วนแสดง)ของคุณสามารถเก็บไว้ในโลเดอร์ย่อยได้ ถ้าคุณชอบวิธีการแบบนี้ ถ้าคุณทำวิธีนี้คุณก็ต้องระบุชื่อโฟลเดอร์นั้นเพื่อที่จะโหลด view (ส่วนแสดง)ที่อยู่ในโฟลเดอร์นี้ ดังตัวอย่าง:$this->load->view('folder_name/file_name');

เพิ่มข้อมูลแบบพลวัติ(เปลี่ยนแปลงอยู่เสมอ)ให้กับ view (ส่วนแสดง)

ข้อมูลที่ส่งจาก controller (ตัวควบคุม)ให้กับ view (ส่วนแสดง)โดยส่งเป็น อาเรย์ หรือ แบบวัตถุ ผ่านพารามิเตอร์ตัวที่สองของฟังก์ชันโหลด view (ส่วนแสดง) ตัวอย่างนี้เป็นการส่งข้อมูลแบบใช้อาเรย์:$data = array(
               'title' => 'My Title',
               'heading' => 'My Heading',
               'message' => 'My Message'
          );

$this->load->view('blogview', $data);

แล้วนี่เป็นตัวอย่างที่ใช้ข้อมูลที่เป็นวัตถุส่ง:$data = new Someclass();
$this->load->view('blogview', $data);

หมายเหตุ: ถ้าคุณใช้วิธีส่งแบบวัตถุ ตัวแปรต่างๆของคลาสจะถูกคืนค่าเป็นอาเรย์ มาลองทำในไฟล์ controller (ตัวควบคุม)ของคุณ เปิดไฟล์แล้วเพิ่มโค้ดนี้ลงไป:

ทีนี้เปิดไฟล์ view (ส่วนแสดง)ขึ้นมาแล้วเพิ่มตัวแปรที่เหมือนกับคีย์ของอาเรย์ของข้อมูลของคุณ:

แล้วทำการโหลดหน้านี้ด้วย URL ที่คุณเคยใช้มาคุณจะเห็นข้อมูลที่มาจากตัวแปรแสดงออกมาแทนแบบเดิม

การสร้างแบบใช้การวนรอบ

ข้อมูลแบบอาเรย์ที่คุณส่งไปให้กับไฟล์ view (ส่วนแสดง) ไม่ใช่แค่จะเป็นข้อมูลธรรมดาๆเท่านั้น แต่สามารถเป็นอาเรย์แบบหลายมิติได้ ซึ่งสามารถวนรอบตัวแปรเหล่านี้เพื่อสร้างแถวข้อมูลแบบหลายๆแถวได้ มาดูตัวอย่างถ้าคุณดึงข้อมูลออกมาจากฐานข้อมูลปกติเนี่ยมันจะออกมาในรูปแบบอาเรย์หลายมิติ

นี่คือตัวอย่างของหัวข้อที่กล่าวมา นำโค้ดนี้เพิ่มเข้าไปใน controller (ตัวควบคุม)ของคุณ:

แล้วเปิดไฟล์ view (ส่วนแสดง) แล้วเขียนแบบนี้:

หมายเหตุ: ตัวอย่างข้างบนเราเขียน PHP อีกแบบนึง ถ้า ถ้าคุณไม่คุ้นละก็ให้คุณลองไปอ่านที่นี้ดู

คืนค่าจาก view (ส่วนแสดง)ออกมาเป็นข้อมูล

พารามิเตอร์ตัวที่สามเป็นตัวเลือกที่ให้คุณเปลี่ยนวิธีการคืนค่าออกมาจากฟังก์ชันเป็นสตริงได้แทนที่จะส่งผลลัพธ์ไปให้กับบราวเซอร์เลยโดยตรง มันจะเป็นประโยชน์มากถ้าคุณต้องการประมวลผลข้อมูลในบางวิธี ถ้าตั้งค่าให้พารามิเตอร์ตัวนี้เป็น true (บูลีน) การคืนค่าจะออกมาเป็นข้อมูล ถ้าตั้งค่าเป็น false ซึ่งเป็นค่าโดยปริยายอยู่แล้วมันจะส่งผลลัพธ์ไปให้บราวเซอร์เลยโดยตรง$string = $this->load->view('myfile', '', true);

ซึ่งจริงๆแล้วมักถูกใช้เวลาที่ต้องคำนวณ view ในหน้านั้นให้เสร็จก่อนเพื่อนำไปใช้ร่วมกับ view อื่นๆ