Menu

Magento 013: Thao tác dữ liệu trong form backend Magento

Trong Tut Magento 012 mình có hướng dẫn các bạn tạo một form để edit dữ liệu trong backend Magento nhưng vẫn chưa nói gì đến những phương thức xử lý dữ liệu được post lên từ những form đó. Bài học hôm nay mình sẽ giới thiệu với các bạn một số phương thức như save, delete data vào trong các table thông qua các model.

Cũng giống như các bài học trước thì mình sẽ không viết lại extension từ đầu đến cuối mà sẽ sử dụng lại extension từ bài học trước đó là Basetut_Salestaff.

1. Lưu dữ liệu vào database

Chúng ta sẽ sử dụng hàm để lưu dữ liệu vào table trong hai trường hợp là:

+ Tạo ra một bản ghi mới.

new

+ Chỉnh sửa một bản ghi có sẵn trong  database.

main

Code action save trong file appcodelocalBasetutSalestaffcontrollersAdminhtmlStaffController.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
/*
 * save staff
 */
public function saveAction(){
 if ($data = $this->getRequest()->getPost()) {
 $model = Mage::getModel('salestaff/staff');
 $model->setData($data)
 ->setId($this->getRequest()->getParam('id'));
 
try {
 $model->save();
 Mage::getSingleton('adminhtml/session')->addSuccess(
 Mage::helper('salestaff')->__('Staff was successfully saved')
 );
 Mage::getSingleton('adminhtml/session')->setFormData(false);
 
if ($this->getRequest()->getParam('back')) {
 $this->_redirect('*/*/edit', array('id' => $model->getId()));
 return;
 }
 $this->_redirect('*/*/');
 return;
 } catch (Exception $e) {
 Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
 Mage::getSingleton('adminhtml/session')->setFormData($data);
 $this->_redirect('*/*/edit', array('id' => $this->getRequest()->getParam('id')));
 return;
 }
 }
}

Trong hàm này ta chỉ cần chú ý đến một số đoạn code quan trọng sau:

+ Check data được post lên:

1
<pre>if ($data = $this->getRequest()->getPost())</pre>

+ Set data và save sử dụng model:

1
2
3
4
5
<pre>$model = Mage::getModel('salestaff/staff');
 $model->setData($data)
 ->setId($this->getRequest()->getParam('id'));
...
 $model->save();</pre>

Nếu tham số get từ url của action save có biến id tức là action đang làm nhiệm vụ save data edit cho một staff có sẵn còn khi không có tham số này tức là $this->getRequest()->getParam(‘id’) bằng null và khi nó $model->setId(null). Sau khi lưu sẽ tạo ra một bản ghi mới cho staff mới được thêm vào.

Ngoài ra thì đoạn code trên có sử dụng hàm redirect để chuyển link và hàm addSuccess, hàm addError để đưa ra thông báo thành công và thành công hay thất bại.

2. Xóa dữ liệu

Chúng ta gọi đến action này khi chúng ta đang ở trong trang edit và muốn xóa đi bản ghi chứa staff hiện tại.

Code action delete trong file appcodelocalBasetutSalestaffcontrollersAdminhtmlStaffController.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/**
* delete item action
*/
public function deleteAction()
{
 if ($this->getRequest()->getParam('id') > 0) {
 try {
 $model = Mage::getModel('salestaff/staff');
 $model->setId($this->getRequest()->getParam('id'))
 ->delete();
 Mage::getSingleton('adminhtml/session')->addSuccess(
 Mage::helper('adminhtml')->__('Staff was successfully deleted')
 );
 $this->_redirect('*/*/');
 } catch (Exception $e) {
 Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
 $this->_redirect('*/*/edit', array('id' => $this->getRequest()->getParam('id')));
 }
 }
 $this->_redirect('*/*/');
}

Trong hàm này đơn giản ta chỉ cần setId của staff cần xóa cho model trước khi gọi lệnh delete mà không cần load cả staff ra.

Source code: basetut_salestaff_1.1

Bài học này tuy rất đơn giản nhưng nó là những gì cơ bản nhất mà mình muốn giới thiệu với mọi người trong phần backend Magento này. Chúc các bạn học tốt!

Facebook Comments

No comments

Trả lời