การส่งค่าฟอร์ม และตรวจสอบ error หน้า page ใหม่ใน OpenCart ตอนที่ 3

เขียนเมื่อ 7 ปีก่อน โดย Ninenik Narkdee
opencart

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

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


จากตอนที่ 1 และตอนที่ 2 ที่ผ่านมา เราได้รู้จักวิธีการสร้างหน้าเพจใหม่ แบบกำหนดเอง
สำหรับ OpenCart และการกำหนดการใช้งานไฟล์ภาษา และการเรียกใช้ สำหรับส่วน
ต่อไปนี้ ซึ่งเป็นตอนที่ 3 เราจะมาดูวิธีการส่งค่าฟอร์ม และตรวจสอบ error 
กรณีมีการตรวจสอบฟอร์มเพิ่มเติม
 
การสร้างหน้า page ใหม่แบบกำหนดเองใน OpenCart ตอนที่ 1 
 
การกำหนด language สำหรับหน้า page ใหม่ใน OpenCart ตอนที่ 2 
 
ต่อจากตอนที่ 2 เราสร้างฟอร์ม ให้ผู้ใช้กรอกข้อมูล บังคับว่าต้องกรอก ชือ นามสกุล
และรายละเอียด ส่วนอีเมลจะกรอกหรือไม่ก็ได้ รูปแบบฟอร์มตามรูปด้านล่าง
 
 
เริ่มต้นเราต้องตรวจสอบว่ามีการส่งข้อมูลมาหรือไม่ โดยเราจะเพิ่มส่วนของคำสั่งในไฟล์
mypage.php ใน controller ที่ catalog/controller/extra/mypage.php 
 
// เมื่อมีการส่งค่าแบบ POST มา จะเข้าเงื่อนไขนี้
if(($this->request->server['REQUEST_METHOD'] == 'POST')) {
	// ทำงานคำสั่งตามกำหนด
}
 
โค้ดด้านบนคือส่วนของคำสั่งสำหรับตรวจสอบการส่งค่าของข้อมูลเข้ามาทำงาน
ในตัวอย่างส่งข้อมูลมาแบบ POST ก็จะมีการกำหนดเป็น REQUEST_METHOD เป็น POST
กรณีส่งค่าแบบ GET ก็จะได้เป็น
 
// เมื่อมีการส่งค่าแบบ GET มา จะเข้าเงื่อนไขนี้
if(($this->request->server['REQUEST_METHOD'] == 'GET')) {
	// ทำงานคำสั่งตามกำหนด
}
 
ข้างต้นเป็นเพียงการตรวจสอบว่ามีการส่งค่ามาหรือไม่ ยังไม่เพียงพอในการตรวจสอบข้อมูล
เราจึงจำเป็นต้องเพิ่มการตรวจข้อมูลเพิ่มเติม ในที่นี้เราจะตรวจสอบ ชื่อ นามสกุล และรายละเอียด
ว่ามีการกรอกข้อมูลหรือไม่ โดยเพิ่มฟังก์ชั่น ดังนี้
 
// ตรวจสอบข้อมูลกรณี ที่จะเกิด error
protected function validate() {
	// ตรวจสอบว่าค่ายาว name น้อยกว่า 1 หรือไม่ ซึ่งก็คือถ้าไม่ได้กรอกชื่อ นามสกุล
	if(utf8_strlen($this->request->post['name']) < 1) {
		$this->error['name'] = $this->language->get('error_name'); // กำหนเ error ข้อความ
	}

	// ตรวจสอบว่าค่ายาว enquiry น้อยกว่า 1 หรือไม่ ซึ่งก็คือถ้าไม่ได้กรอกรายละเอียด
	if(utf8_strlen($this->request->post['enquiry']) < 1) {
		$this->error['enquiry'] = $this->language->get('error_enquiry'); // กำหนเ error ข้อความ
	}
	
	return !$this->error; // คืนค่า ข้อความ error ถ้ามี
}
 
สังเกตว่าการตรวจสอบนี้ เป็นการตรวจสอบเพื่อเช็คการ error แล้วคืนค่าข้อความ error กลับ
ข้อความ error ได้จากที่เรากำหนดในไฟล์ภาษาในตอนที่ 2
ฟังก์ชั่นข้างต้น ถ้าเราไม่กรอกชื่อ นามสกุล และรายละเอียด ฟังก์ชั่นก็จะส่งค่า error ข้อความ
ออกมา
 
สำหรับการตรวจสอบฟอร์มหรือข้อมูลนั้น เราสามารถกำหนดโค้ดเพื่อรองรับการใช้งาน captcha
หรือที่เรียกว่าระบบตรวจสอบว่าข้อมูลที่ส่งมานั้นเป้นการส่งจากการคลิกของผู้ใช้หรือไม่ด้วย โดย
เพื่อให้รองรับ เราสามารรถกำหนดโค้ดเพิ่มได้ดั้งนี้
 
	// โค้ดรองรับการใช้งาน Captcha เช็คว่าถ้าไม่มีการส่งค่า captcha ให้คืนค่า error 
	if ($this->config->get($this->config->get('config_captcha') . '_status') && in_array('mypage', (array)$this->config->get('config_captcha_page'))) { // ถ้ามีการกำหนดให้ใช้งาน captcha ในหน้า mypage
		// ตรวจสอบการกรอก captcha โดยแสดงรูป captcha ให้กรอก แล้วเช็คว่ากรอกข้อมูลถูกต้องหรือไม่
		$captcha = $this->load->controller('captcha/' . $this->config->get('config_captcha') . '/validate');

		if ($captcha) {
			// ถ้า captcha ไม่ตรง คืนค่า error
			$this->error['captcha'] = $captcha;
		}
	}	
 
 
หากเราใช้กำหนดกับหน้าอื่นๆ ก็เปลี่ยนในส่วนของคำว่า mypage ในส่วน 
 in_array('mypage',  เป็นชื่อไฟล์ controller ที่เราใช้งาน
 
เราจะได้ฟังก์ชั่น validate() เต็มเป็นดังนี้
 
// ตรวจสอบข้อมูลกรณี ที่จะเกิด error
protected function validate() {
	// ตรวจสอบว่าค่ายาว name น้อยกว่า 1 หรือไม่ ซึ่งก็คือถ้าไม่ได้กรอกชื่อ นามสกุล
	if(utf8_strlen($this->request->post['name']) < 1) {
		$this->error['name'] = $this->language->get('error_name'); // กำหนเ error ข้อความ
	}

	// ตรวจสอบว่าค่ายาว enquiry น้อยกว่า 1 หรือไม่ ซึ่งก็คือถ้าไม่ได้กรอกรายละเอียด
	if(utf8_strlen($this->request->post['enquiry']) < 1) {
		$this->error['enquiry'] = $this->language->get('error_enquiry'); // กำหนเ error ข้อความ
	}
	
	// โค้ดรองรับการใช้งาน Captcha เช็คว่าถ้าไม่มีการส่งค่า captcha ให้คืนค่า error 
	if ($this->config->get($this->config->get('config_captcha') . '_status') && in_array('mypage', (array)$this->config->get('config_captcha_page'))) { // ถ้ามีการกำหนดให้ใช้งาน captcha ในหน้า mypage
		// ตรวจสอบการกรอก captcha โดยแสดงรูป captcha ให้กรอก แล้วเช็คว่ากรอกข้อมูลถูกต้องหรือไม่
		$captcha = $this->load->controller('captcha/' . $this->config->get('config_captcha') . '/validate');

		if ($captcha) {
			// ถ้า captcha ไม่ตรง คืนค่า error
			$this->error['captcha'] = $captcha;
		}
	}		
	
	return !$this->error; // คืนค่า ข้อความ error
}
 
 
เมื่อได้ฟังก์ชั่นตรวจสอบข้อมูลแล้ว เราก็เรียกใช้งาน โดยเพิ่มในเงื่อนไขกรณีมีการส่งข้อมูล จะได้เป็น
 
// เมื่อมีการส่งค่าแบบ POST มา จะเข้าเงื่อนไขนี้
if(($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) {
	// ทำงานคำสั่งตามกำหนด
}
 
เงื่อนไขที่เพิ่มเข้ามาคือ มีการส่งข้อมูลแบบ POST เข้ามา และ ไม่มี error หลังตรวจสอบข้อมูลแล้ว
โปรแกรมก็จะทำงานในเงื่อนไข
 
แล้วถ้าเกิด error คำสั่งในเงื่อนไขนี้ก็จะไม่ทำงาน และข้อความ error ที่ส่งค่ากลับมาจากการตรวจสอบ
ด้วยฟังก์ชั่น this->validate() เราก็ต้องมาจัดการข้อความ error ที่ได้กลับมา เพื่อไปแสดงใน template 
ที่เรากำหนด โดยกำหนดดังนี้
 
// ถ้ามีข้อความ error สำหรับ name กรณีไม่ผ่านเงื่อนไข
if (isset($this->error['name'])) {
	$data['error_name'] = $this->error['name']; // เก็บข้อความ error ที่แจ้ง
} else {
	$data['error_name'] = ''; // ถ้าไม่มี error ก็กำหนดเป็นค่าว่าง
}
// ถ้ามีข้อความ error สำหรับ enquiry กรณีไม่ผ่านเงื่อนไข
if (isset($this->error['enquiry'])) {
	$data['error_enquiry'] = $this->error['enquiry']; // เก็บข้อความ error ที่แจ้ง
} else {
	$data['error_enquiry'] = ''; // ถ้าไม่มี error ก็กำหนดเป็นค่าว่าง
}
 
ต่อไป เราจะสมมติว่า เมื่อมีการส่งค่าข้อมูลและไม่เกิด error หลังจากทำงานที่เรากำหนดแล้ว
ก็ให้ลิ้งค์ไปที่หน้า sucess หรือทำงานสำเร็จ โดยใช้คำสั่งนี้ เพื่อให้ redirect ไปหน้าที่เราต้องการ
 
$this->response->redirect($this->url->link('extra/mypage/success'));
 
จะได้เป็น
 
// เมื่อมีการส่งค่าแบบ POST มา จะเข้าเงื่อนไขนี้
if(($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) {
	// ทำงานคำสั่งตามกำหนด
	$this->response->redirect($this->url->link('extra/mypage/success')); // แล้วลิ้งค์ไปที่หน้าที่เรากำหนด
}	
 
ถ้าสมมติเราไปทดสอบรัน และกรอกข้อมูลจนครบ เมื่อมีการ redirect ไปที่หน้า
 
http://localhost/store/index.php?route=extra/mypage/success
 
หน้าเพจก็จะแจ้งว่าไม่พบหน้าดังกล่าว ดังนั้นจึงต้องสร้าง ฟังก์ชั่น success เพื่อเป็นหน้าแสดง
แจ้งว่าทำงานสำเร็จเรียบร้อยแล้ว โดยหน้านี้เราไม่จำเป็นจะต้องสร้างไฟล์ template เพิ่มก็ได้
เนื่องจาก OpenCart มี template ที่รองรับส่วนนี้อยู่แล้ว สิ่งที่เราต้องทำคือแค่ส่งค่าข้อความ
และลิ้งค์เข้าไปเท่านั้น เราจะได้ฟังก์ชั่น success เป็นดังนี้
 
public function success() {
	// โหลดข้อมูลภาษาจากไฟล์ภาษา
	$this->load->language('extra/mypage');

	// กำหนดส่วนของ title ของหน้าเพจ
	$this->document->setTitle($this->language->get('heading_title'));

	// ตัวแปรสำหรับกำหนดเส้นทางของลิ้งค์ข้อมูลเป็นลักษณะลำดับชั้น
	$data['breadcrumbs'] = array();

	// ลำดับชั้นหลัก หน้าแรก home  กำหนดข้อความ และลิ้งค์
	$data['breadcrumbs'][] = array(
		'text' => $this->language->get('text_home'),
		'href' => $this->url->link('common/home')
	);

	// ลำดับชั้นลำดับต่อมา mypage  กำหนดข้อความ และลิ้งค์
	$data['breadcrumbs'][] = array(
		'text' => $this->language->get('heading_title'),
		'href' => $this->url->link('extra/mypage')
	);

	// ข้อความหัวข้อ การแจ้งดำเนินการสำเร็จ
	$data['heading_title'] = $this->language->get('text_demo_form');
	// ข้อความรายละเอียด แจ้งข้อความดำเนินการสำเร็จ
	$data['text_message'] = $this->language->get('text_demo_success');
	
	// ข้อความสำหรับปุ่ม ดำเนินการต่อ หรือปุ่ม next ข้อความจากตัวแปร button_continue จะดึงจาก
	// ไฟล์ภาษาของระบบ แต่เราสามารถเปลี่ยนเป้นค่าที่เรากำหนดได้
	$data['button_continue'] = $this->language->get('button_continue');

	// ล้้งค์ของปุ่มกด ดำเนินการต่อ ว่าเราต้องการลิ้งค์ไปหน้าไหนต่อ อันนี้คือกลับมาหน้าฟอร์มเดิม
	$data['continue'] = $this->url->link('extra/mypage');

	// โหลดเนื้อหาส่วนต่างๆ ของหน้าเพจ มาไว้ในตัวแปร
	$data['column_left'] = $this->load->controller('common/column_left');
	$data['column_right'] = $this->load->controller('common/column_right');
	$data['content_top'] = $this->load->controller('common/content_top');
	$data['content_bottom'] = $this->load->controller('common/content_bottom');
	$data['footer'] = $this->load->controller('common/footer');
	$data['header'] = $this->load->controller('common/header');
	
	// แสดงผลข้อมูลโดยนำค่าตัวแปร $data ส่งไปแสดงใน template  common/success.tpl
	$this->response->setOutput($this->load->view('common/success', $data));
}
 
 
สังเกตว่าในส่วนของฟังก์ชั่น success เรามาการไปเรียกใช้งาน template หลักของ OpenCart 
ในส่วนของ common/seccess.tp ซึ่งหน้านี้มีการใช้งาน breadcrumbs หรือลิ้งค์แบบลำดับขั้น
ด้านบนก่อนเนื้อหา เราจึงจำเป็นต้องกำหนด ตัวแปร breadcrumbs เพื่อใช้งานส่วนนี้ด้วย
 
แต่ในส่วนของฟังก์ชั่น index() เราไม่ได้กำหนด เพราะว่า ในไฟล์ template ของเราที่ไฟล์
catalog/view/theme/default/template/extra/mypage.tpl ไม่มีการกำหนดเรียกใช้งาน
ดังนั้นในที่นี้เราจะกำหนด ตัวแปร breadcrumbs ในฟังก์ชัน index() ด้วย 
 
แต่ก่อนอื่น เราจะมาปรับไฟล์ mypage.tpl ของเราดังนี้
- รองรับการเรียกใช้งาน breadcrumbs 
- การกำหนดให้รองรับการใช้งาน catpcha 
- การกำหนด action ไฟล์ url ให้ฟอร์ม
- และรวมถึงกำหนดให้รองรับค่าของข้อมูล ให้คงข้อมูลบางรายการไว้กรณีกรอกข้อมูลยังไม่สมบูรณ์ 
เช่น สมมติกรอกชื่อ นามสกุล อีเมล แต่ลืมกรอก รายละเอียด ถ้าเราไม่กำหนดตัวแปร เพื่อคงค่า
เดิมไว้ เมื่อมีการส่งข้อความ และฟอร์มแจ้ง error เราก็จะต้องกรอกข้อมูลใหม่ทั้งหมด แทนที่
จะกรอกแค่ รายละเอียด ที่เดิมไม่ได้กรอก และข้อมูลชื่อ นามสกุล และอีเมล ก็ไม่ต้องกรอกซ้ำ
 
โดยเราจะปรับไฟล์ mypage.tpl  ตามที่บอกดังนี้
 
ส่วนแรก เพิ่มส่วนของการแสดงผล breadcrumbs 
 
  <ul class="breadcrumb">
    <?php foreach ($breadcrumbs as $breadcrumb) { ?>
    <li><a href="<?php echo $breadcrumb['href']; ?>"><?php echo $breadcrumb['text']; ?></a></li>
    <?php } ?>
  </ul>
 
ส่วนที่สอง การกำหนด action ไฟล์ url ให้ฟอร์ม ซึ่งถ้าปกติแล้ว  ถ้าเราปล่อยเป็นค่าว่าง
action ไฟล์ url ของฟอร์มนั้นก็จะเป็น url หน้านั้นๆ แต่เพื่อให้มีความถูกต้อง และให้ยืดหยุ่น
สามารถเปลี่ยนค่าทีหลังได้ เราจึงควรส่งค่าตัวแปร $action สำหรับเป็น action ไฟล์ url ของฟอร์มดังนี้
 
<form action="<?php echo $action; ?>" method="post" enctype="multipart/form-data" class="form-horizontal">
 
ส่วนที่สาม กำหนดค่าตัวแปร ให้กับข้อมูลในฟอร์ม เพื่อคงค่าข้อมูลเดิมกรณียังส่งข้อมูลไม่ผ่าน
 
<input type="text" name="name" value="<?php echo $name; ?>" id="input-name" class="form-control" />

<input type="text" name="email" value="<?php echo $email; ?>" id="input-email" class="form-control" />

<textarea name="enquiry" rows="10" id="input-enquiry" class="form-control"><?php echo $enquiry; ?></textarea>
 
จะเห็นว่าเรากำหนดให้แสดงค่าข้อมูลจากตัวแปร ถ้ามีค่าข้อมูลเดิม โดยเรียกใช้คำสั่ง
 
<?php echo $name; ?>
<?php echo $email; ?>
<?php echo $enquiry; ?>
 
ซึ่งหมายความว่า เราต้องไปกำหนดเพิ่มเติมในไฟล์ controller เพื่อส่งค่าตัวแปรทั้งสามเข้ามา
 
และส่วนสุดท้าย การกำหนดการแสดง captcha ไว้เพื่อรองรับการเรียกใช้งานในอนาคต ซึ่งการกำหนดไว้ในขั้นตอนนี้
ไม่ได้หมายถึงเปิดใช้งาน แต่เป็นการเพิ่มไว้เพื่อรองรับการใช้งาน หากต้องการใช้งานต้องเปิดใช้ผ่านระบบผู้ดูแลระบบ
 
<?php echo $captcha; ?>
 
เราจะได้ไฟล์ template สุดท้าย ดังนี้ 
ไฟล์ mypage.tpl 
path อยู่ที่ catalog/view/theme/default/template/extra/mypage.tpl
 
<?php echo $header; ?>
<div class="container">
<!--ส่วนของการกำหนดการใช้งาน  breadcrumb-->
  <ul class="breadcrumb">
    <?php foreach ($breadcrumbs as $breadcrumb) { ?>
    <li><a href="<?php echo $breadcrumb['href']; ?>"><?php echo $breadcrumb['text']; ?></a></li>
    <?php } ?>
  </ul>
  <div class="row"><?php echo $column_left; ?>
    <?php if ($column_left && $column_right) { ?>
    <?php $class = 'col-sm-6'; ?>
    <?php } elseif ($column_left || $column_right) { ?>
    <?php $class = 'col-sm-9'; ?>
    <?php } else { ?>
    <?php $class = 'col-sm-12'; ?>
    <?php } ?>
    <div id="content" class="<?php echo $class; ?>">
    <?php echo $content_top; ?>
    <?php echo $my_demo_text; ?>
    
<!--ฟอร์มที่เพิ่มเข้ามาใหม่ -->
      <form action="<?php echo $action; ?>" method="post" enctype="multipart/form-data" class="form-horizontal">
        <fieldset>
          <legend><?php echo $text_demo_form; ?></legend>
          <div class="form-group required">
            <label class="col-sm-2 control-label" for="input-name"><?php echo $entry_name; ?></label>
            <div class="col-sm-10">
              <input type="text" name="name" value="<?php echo $name; ?>" id="input-name" class="form-control" />
              <?php if ($error_name) { ?>
              <div class="text-danger"><?php echo $error_name; ?></div>
              <?php } ?>
            </div>
          </div>
          <div class="form-group">
            <label class="col-sm-2 control-label" for="input-email"><?php echo $entry_email; ?></label>
            <div class="col-sm-10">
              <input type="text" name="email" value="<?php echo $email; ?>" id="input-email" class="form-control" />
            </div>
          </div>
          <div class="form-group required">
            <label class="col-sm-2 control-label" for="input-enquiry"><?php echo $entry_enquiry; ?></label>
            <div class="col-sm-10">
              <textarea name="enquiry" rows="10" id="input-enquiry" class="form-control"><?php echo $enquiry; ?></textarea>
              <?php if ($error_enquiry) { ?>
              <div class="text-danger"><?php echo $error_enquiry; ?></div>
              <?php } ?>
            </div>
          </div>
<!--         ส่วนสำหรับรองรับการใช้งาน captcha-->
          <?php echo $captcha; ?>
        </fieldset>
        <div class="buttons">
          <div class="pull-right">
            <input class="btn btn-primary" type="submit" value="<?php echo $button_submit; ?>" />
          </div>
        </div>
      </form>    
 <!--ฟอร์มที่เพิ่มเข้ามาใหม่ -->
    
    <?php echo $content_bottom; ?></div>
    <?php echo $column_right; ?></div>
</div>
<?php echo $footer; ?>
 
จากนั้นเรากลับมาที่ไฟล์ controller 
เพื่อเพิ่มส่วนของตัวแปร breadcrumbs  หรือลิ้งค์ลำดับขั้น 
เพิ่มตัวแปร $action สำหรับ action ไฟล์ url 
กำหนดตัวแปรค่าเริ่มต้น 3 ค่าของข้อมูลในฟอร์ม ที่เราส่งไปใน template
และการกำหนดให้รองรับการเรียกใช้งาน captcha
 
ส่วนแรก ที่จะเพิ่มเข้าไปในไฟล์ controller ฟังก์ชั่น index() คือ breadcrumbs ดังนี้
 
	// ตัวแปรสำหรับกำหนดเส้นทางของลิ้งค์ข้อมูลเป็นลักษณะลำดับชั้น
	$data['breadcrumbs'] = array();

	// ลำดับชั้นหลัก หน้าแรก home  กำหนดข้อความ และลิ้งค์
	$data['breadcrumbs'][] = array(
		'text' => $this->language->get('text_home'),
		'href' => $this->url->link('common/home')
	);

	// ลำดับชั้นลำดับต่อมา mypage  กำหนดข้อความ และลิ้งค์
	$data['breadcrumbs'][] = array(
		'text' => $this->language->get('heading_title'),
		'href' => $this->url->link('extra/mypage')
	);	
 
ส่วนที่สอง คือ ส่วนสำหรับกำหนดตัวแปร $action สำหรับ action ไฟล์ url ของฟอร์ม
 
	$data['action'] = $this->url->link('extra/mypage', '', true);
 
ส่วนที่สาม คือ ตัวแปรค่าเริ่มต้นของข้อมูลฟอร์ม
 
	// ถ้ามีส่งค่า name นั่นหมายถึง $data['name'] จะเก็บค่าจาก $_POST['name'] 
	// แล้วถูกใช้งานในชื่อตัวแปร $name ในไฟล์ template
	if (isset($this->request->post['name'])) {
		$data['name'] = $this->request->post['name'];
	} else {
		$data['name'] = ''; //ไม่มีการส่งค่ามา ให้เป็นค่าว่าง
	}

	// ถ้ามีส่งค่า email นั่นหมายถึง $data['email'] จะเก็บค่าจาก $_POST['email'] 
	// แล้วถูกใช้งานในชื่อตัวแปร $email ในไฟล์ template
	if (isset($this->request->post['email'])) {
		$data['email'] = $this->request->post['email'];
	} else {
		$data['email'] = ''; //ไม่มีการส่งค่ามา ให้เป็นค่าว่าง
	}
	
	// ถ้ามีส่งค่า enquiry นั่นหมายถึง $data['enquiry'] จะเก็บค่าจาก $_POST['enquiry'] 
	// แล้วถูกใช้งานในชื่อตัวแปร $enquiry ในไฟล์ template
	if (isset($this->request->post['enquiry'])) {
		$data['enquiry'] = $this->request->post['enquiry'];
	} else {
		$data['enquiry'] = ''; //ไม่มีการส่งค่ามา ให้เป็นค่าว่าง
	}		
 
และส่วนสุดท้าย ส่วนของการรองรับการใช้งาน captcha
 
	// โค้ดรองรับการใช้งาน Captcha
	if ($this->config->get($this->config->get('config_captcha') . '_status') && in_array('mypage', (array)$this->config->get('config_captcha_page'))) { // ถ้ามีการกำหนดให้ใช้งาน captcha ในหน้า mypage
		// แสดง captcha 
		$data['captcha'] = $this->load->controller('captcha/' . $this->config->get('config_captcha'), $this->error); 
	} else {
		// ถ้าไม่มีการกำหนด ให้ใช้งาน กำหนดเป็นค่าว่าง ไม่มีการใช้งาน captcha
		$data['captcha'] = '';
	}
 
 
เราจะได้ไฟล์ controller สุดท้าย ดังนี้ 
ไฟล์ mypage.php 
path อยู่ที่ catalog/controller/extra/mypage.php 
 
<?php
class ControllerExtraMypage extends Controller {
	// ตัวแปร $error กำหนดไว้ ยังไม่ได้ใช้งานในตอนนี้
	private $error = array();

	public function index() {
		// โหลดข้อมูลภาษาจากไฟล์ภาษา
		$this->load->language('extra/mypage');
		
		// กำหนดส่วนของ title ของหน้าเพจ
		$this->document->setTitle($this->language->get('heading_title'));
		
		// เมื่อมีการส่งค่าแบบ POST มา จะเข้าเงื่อนไขนี้
		if(($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) {
			// ทำงานคำสั่งตามกำหนด
			// แล้วลิ้งค์ไปที่หน้าที่เรากำหนด
			$this->response->redirect($this->url->link('extra/mypage/success')); 
		}	
		
		// ตัวแปรสำหรับกำหนดเส้นทางของลิ้งค์ข้อมูลเป็นลักษณะลำดับชั้น
		$data['breadcrumbs'] = array();

		// ลำดับชั้นหลัก หน้าแรก home  กำหนดข้อความ และลิ้งค์
		$data['breadcrumbs'][] = array(
			'text' => $this->language->get('text_home'),
			'href' => $this->url->link('common/home')
		);

		// ลำดับชั้นลำดับต่อมา mypage  กำหนดข้อความ และลิ้งค์
		$data['breadcrumbs'][] = array(
			'text' => $this->language->get('heading_title'),
			'href' => $this->url->link('extra/mypage')
		);		
					
		// กำหนดตัวแปรในส่วนของการใช้งานภาษา 
		$data['text_demo_form'] = $this->language->get('text_demo_form');
		$data['text_demo_success'] = $this->language->get('text_demo_success');
		$data['text_demo_back'] = $this->language->get('text_demo_back');
		
		$data['entry_name'] = $this->language->get('entry_name');
		$data['entry_email'] = $this->language->get('entry_email');
		$data['entry_enquiry'] = $this->language->get('entry_enquiry');
		$data['button_submit'] = $this->language->get('button_submit');
		
		$data['error_name'] = $this->language->get('error_name');
		$data['error_enquiry'] = $this->language->get('error_enquiry');

		// ถ้ามีข้อความ error สำหรับ name กรณีไม่ผ่านเงื่อนไข
		if (isset($this->error['name'])) {
			$data['error_name'] = $this->error['name']; // เก็บข้อความ error ที่แจ้ง
		} else {
			$data['error_name'] = ''; // ถ้าไม่มี error ก็กำหนดเป็นค่าว่าง
		}
		// ถ้ามีข้อความ error สำหรับ enquiry กรณีไม่ผ่านเงื่อนไข
		if (isset($this->error['enquiry'])) {
			$data['error_enquiry'] = $this->error['enquiry']; // เก็บข้อความ error ที่แจ้ง
		} else {
			$data['error_enquiry'] = ''; // ถ้าไม่มี error ก็กำหนดเป็นค่าว่าง
		}
																						
		// กำหนดตัวแปร ที่่ต้องการส่งค่าไปแสดง หรือใช้งาน
		$data['my_demo_text'] = "This is mypage.";
		
		// ถ้ามีส่งค่า name นั่นหมายถึง $data['name'] จะเก็บค่าจาก $_POST['name'] 
		// แล้วถูกใช้งานในชื่อตัวแปร $name ในไฟล์ template
		if (isset($this->request->post['name'])) {
			$data['name'] = $this->request->post['name'];
		} else {
			$data['name'] = ''; //ไม่มีการส่งค่ามา ให้เป็นค่าว่าง
		}

		// ถ้ามีส่งค่า email นั่นหมายถึง $data['email'] จะเก็บค่าจาก $_POST['email'] 
		// แล้วถูกใช้งานในชื่อตัวแปร $email ในไฟล์ template
		if (isset($this->request->post['email'])) {
			$data['email'] = $this->request->post['email'];
		} else {
			$data['email'] = ''; //ไม่มีการส่งค่ามา ให้เป็นค่าว่าง
		}
		
		// ถ้ามีส่งค่า enquiry นั่นหมายถึง $data['enquiry'] จะเก็บค่าจาก $_POST['enquiry'] 
		// แล้วถูกใช้งานในชื่อตัวแปร $enquiry ในไฟล์ template
		if (isset($this->request->post['enquiry'])) {
			$data['enquiry'] = $this->request->post['enquiry'];
		} else {
			$data['enquiry'] = ''; //ไม่มีการส่งค่ามา ให้เป็นค่าว่าง
		}		
		
		// ส่วนสำหรับกำหนดตัวแปร $action สำหรับ action ไฟล์ url ของฟอร์ม
		$data['action'] = $this->url->link('extra/mypage', '', true);
		
		// โค้ดรองรับการใช้งาน Captcha
		if ($this->config->get($this->config->get('config_captcha') . '_status') && in_array('mypage', (array)$this->config->get('config_captcha_page'))) { // ถ้ามีการกำหนดให้ใช้งาน captcha ในหน้า mypage
			// แสดง captcha 
			$data['captcha'] = $this->load->controller('captcha/' . $this->config->get('config_captcha'), $this->error); 
		} else {
			// ถ้าไม่มีการกำหนด ให้ใช้งาน กำหนดเป็นค่าว่าง ไม่มีการใช้งาน captcha
			$data['captcha'] = '';
		}			
		
		// โหลดเนื้อหาส่วนต่างๆ ของหน้าเพจ มาไว้ในตัวแปร
		$data['column_left'] = $this->load->controller('common/column_left');
		$data['column_right'] = $this->load->controller('common/column_right');
		$data['content_top'] = $this->load->controller('common/content_top');
		$data['content_bottom'] = $this->load->controller('common/content_bottom');
		$data['footer'] = $this->load->controller('common/footer');
		$data['header'] = $this->load->controller('common/header');

		// แสดงผลข้อมูลโดยนำค่าตัวแปร $data ส่งไปแสดงใน template  extra/mypage.tpl
		$this->response->setOutput($this->load->view('extra/mypage', $data));
	}
	
	// ตรวจสอบข้อมูลกรณี ที่จะเกิด error
	protected function validate() {
		// ตรวจสอบว่าค่ายาว name น้อยกว่า 1 หรือไม่ ซึ่งก็คือถ้าไม่ได้กรอกชื่อ นามสกุล
		if(utf8_strlen($this->request->post['name']) < 1) {
			$this->error['name'] = $this->language->get('error_name'); // กำหนเ error ข้อความ
		}
	
		// ตรวจสอบว่าค่ายาว enquiry น้อยกว่า 1 หรือไม่ ซึ่งก็คือถ้าไม่ได้กรอกรายละเอียด
		if(utf8_strlen($this->request->post['enquiry']) < 1) {
			$this->error['enquiry'] = $this->language->get('error_enquiry'); // กำหนเ error ข้อความ
		}
			
		// โค้ดรองรับการใช้งาน Captcha เช็คว่าถ้าไม่มีการส่งค่า captcha ให้คืนค่า error 
		if ($this->config->get($this->config->get('config_captcha') . '_status') && in_array('mypage', (array)$this->config->get('config_captcha_page'))) { // ถ้ามีการกำหนดให้ใช้งาน captcha ในหน้า mypage
			// ตรวจสอบการกรอก captcha โดยแสดงรูป captcha ให้กรอก แล้วเช็คว่ากรอกข้อมูลถูกต้องหรือไม่
			$captcha = $this->load->controller('captcha/' . $this->config->get('config_captcha') . '/validate');
	
			if ($captcha) {
				// ถ้า captcha ไม่ตรง คืนค่า error
				$this->error['captcha'] = $captcha;
			}
		}	
		
		return !$this->error; // คืนค่า ข้อความ error
	}	

	public function success() {
		// โหลดข้อมูลภาษาจากไฟล์ภาษา
		$this->load->language('extra/mypage');

		// กำหนดส่วนของ title ของหน้าเพจ
		$this->document->setTitle($this->language->get('heading_title'));

		// ตัวแปรสำหรับกำหนดเส้นทางของลิ้งค์ข้อมูลเป็นลักษณะลำดับชั้น
		$data['breadcrumbs'] = array();

		// ลำดับชั้นหลัก หน้าแรก home  กำหนดข้อความ และลิ้งค์
		$data['breadcrumbs'][] = array(
			'text' => $this->language->get('text_home'),
			'href' => $this->url->link('common/home')
		);

		// ลำดับชั้นลำดับต่อมา mypage  กำหนดข้อความ และลิ้งค์
		$data['breadcrumbs'][] = array(
			'text' => $this->language->get('heading_title'),
			'href' => $this->url->link('extra/mypage')
		);

		// ข้อความหัวข้อ การแจ้งดำเนินการสำเร็จ
		$data['heading_title'] = $this->language->get('text_demo_form');
		// ข้อความรายละเอียด แจ้งข้อความดำเนินการสำเร็จ
		$data['text_message'] = $this->language->get('text_demo_success');
		
		// ข้อความสำหรับปุ่ม ดำเนินการต่อ หรือปุ่ม next ข้อความจากตัวแปร button_continue จะดึงจาก
		// ไฟล์ภาษาของระบบ แต่เราสามารถเปลี่ยนเป้นค่าที่เรากำหนดได้
		$data['button_continue'] = $this->language->get('button_continue');

		// ล้้งค์ของปุ่มกด ดำเนินการต่อ ว่าเราต้องการลิ้งค์ไปหน้าไหนต่อ อันนี้คือกลับมาหน้าฟอร์มเดิม
		$data['continue'] = $this->url->link('extra/mypage');

		// โหลดเนื้อหาส่วนต่างๆ ของหน้าเพจ มาไว้ในตัวแปร
		$data['column_left'] = $this->load->controller('common/column_left');
		$data['column_right'] = $this->load->controller('common/column_right');
		$data['content_top'] = $this->load->controller('common/content_top');
		$data['content_bottom'] = $this->load->controller('common/content_bottom');
		$data['footer'] = $this->load->controller('common/footer');
		$data['header'] = $this->load->controller('common/header');
		
		// แสดงผลข้อมูลโดยนำค่าตัวแปร $data ส่งไปแสดงใน template  common/success.tpl
		$this->response->setOutput($this->load->view('common/success', $data));
	}
	
}
 
 
ทั้งหมดเราจะเห็นครอบคลุม การกำหนดค่าต่างๆ เท่าที่จำเป็นแล้ว แต่ยังเหลือส่วนเพิ่มเติม
ที่จะอธิบายเพิ่มในภายหลัง เช่น การใช้งาน model ซึ่งกรณีหน้านี้ ความเป็นจริง ไม่จำเป็น
ต้องใช้งาน model ก็ได้ แต่เพื่อให้ครอบคลุม จะพยายามเพิ่มเติมให้ในภายหลัง
นอกจากนั้นก็มี กรณีการใช้งานสำหรับหน้าที่เป็นสำหรับสมาชิกเท่านั้น ก็จะขออธิบายเพิ่มเติม
ในลำดับต่อๆ ไป โปรดติดตาม


 
รูปประกอบ พร้อมคำอธิบาย เมื่อเปิดมาครั้งแรก
http://localhost/store/index.php?route=extra/mypage ส่วนด้านบน จะเป้นลิ้งค์ลำดับขั้น 
หรือที่เรียกว่า breadcrumbs
 
 
 
รูปต่อมา พอเราทดสอบโดยกรอก ชื่อ นามสกุล และอีเมล แต่ไม่กรอกส่วนของ รายละเอียด
จากนั้นกด ส่งข้อมูล จะพบ error แจ้งในส่วนของรายละเอียด แจ้งให้เรากรอกข้อมูลให้ครบ
และเราจะเห็นว่า ชื่อ นามสกุล และอีเมล จะยังคงค่าเดิมที่เราได้กรอกไว้ 
 
 
รูปสุดท้าย พอเรากรอกข้อมูลใหม่ให้ครบ แล้วกดส่งข้อมูล หน้าเพจ ก็ทำงานตามคำสั่ง
ถ้าเรากำหนด แล้วลิ้งค์มาที่หน้านี้ที่ url
http://localhost/store/index.php?route=extra/mypage/success
และแจ้งการทำงาน พร้อมมีปุ่มให้เรากด ดำเนินการต่อ เพื่อกลับไปหน้าที่เรากำหนด
 
 


 


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



อ่านต่อที่บทความ









เนื้อหาที่เกี่ยวข้อง



Tags:: opencart







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











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