Tut 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.
+ Chỉnh sửa một bản ghi có sẵn trong database.
Code action save trong file app\code\local\Basetut\Salestaff\controllers\Adminhtml\StaffController.php
/* * 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:
<pre>if ($data = $this->getRequest()->getPost())</pre>
+ Set data và save sử dụng model:
<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 app\code\local\Basetut\Salestaff\controllers\Adminhtml\StaffController.php
/** * 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!
Bài viết đọc xong là hiểu liền đó anh
good! 🙂
🙂
Magento cũng không khó nhỉ. Cảm ở quá dễ hiểu
Cảm ơn bạn rất nhiều! 🙂
anh blanka cho em hỏi :
– Tạo form, edit,update,add trong admin có giống ngoài frontend không?
-VD em muốn tạo form add,edit ngoài frontend thì làm sao để tạo được ah em thử dùng 2 template trong 1 layout nhưng bị báo lỗi @@ tức là khi bấm add/edit nó load ra form edit còn bình thường là load ra form chính ấy ah
Tất nhiên là tạo được nhưng mà nó sẽ phức tạp hơn ở trong backend. Ở trong backend Magento viết sẵn cho mình các lớp của form edit và mình có field nào chỉ cần add vào là được, nó có sẵn style admin rồi còn ở ngoài frontend mình phải tự viết file template, tất nhiên trong file template này thì mình phải đặt class sao cho nó giống với class form frontend của Magento để các form có style giống nhau hoặc verify dữ liệu. Nếu bạn có vấn đề gì có thể report một cách chi tiết lên forum basetut: http://forum.basetut.com/và team của mình sẽ giúp đỡ bạn vì comment trong blog nó hơi khó nhìn. Cảm ơn bạn.
a ơi. em thêm 1 tab hiển thị grid hiển thị dữ liệu sp từ (‘catalò/product’) trong phần edit tab. Bây giờ em muốn edit dữ liệu hoặc từ gird mới thêm và grid của module mình vừa tạo như thế nào vậy a. trong file controller.php thêm vào mục edit như này dc không a
public function editAction() {
$id = $this->getRequest()->getParam(‘id’);
$model = Mage::getModel(‘dailydeal/dailydeal’)->load($id);
// them moi model
$model = Mage::getModel(‘catalog/product’)->load($product_id);
//…
Bạn ơi mô tả đầy đủ và chi tiết lên forum: http://forum.basetut.com/index.php Team của mình sẽ giúp bạn giải quyết vấn đề.
lúc thêm tab product thì trong phần item edit không save được nữa là sao vậy anh. Với lại bây giờ e muốn thêm mới 1 sản phẩm lấy từ product với thông tin(id, name..) để add hiển thị vào adminhtml/mymodule/grid.php để từ đây lấy ra edit thêm 1 số thuộc tính như thời gian bảo hành.. thì phải làm sao vậy?
Item của bạn ở đây là gì vậy? Bạn đang có một grid daily deal và khi edit nó bạn có thêm một tab là list product ah? Và khi save nó thông báo lỗi gì vậy? Bạn mô tả chi tiết hơn thì mình có thể giúp bạn xử lý nó ^^ mấy cái này cứ Zend_debug::dump với die là ra hết mà.
có bác nào tìm ra cách sửa cái form của mình nó bị nằm bên trái chỗ infornation chưa az…post lên cho mn cung tham khao voi,em bug mai ma không ra:((
done ! mình viết lại mấy cái khai báo sắp xếp vị trí layout trong controller,bạn nào lỗi chỗ này thì sửa nhé
$this->_addContent($this->getLayout()->createBlock(‘qlnv/adminhtml_staff_edit’));
$this->_addLeft($this->getLayout()->createBlock(‘qlnv/adminhtml_staff_edit_tabs’));
$this->_addContent($this->getLayout()->createBlock(‘qlnv/adminhtml_staff_edit_tab_form’));
Anh ơi chỉ em vấn đề này. Hiện tại website magento của e chạy rất chậm khoảng 7-10 giây mới load xong trag web. Em cũng tìm trên mạng 1 số cách nén và tối ưu nhưng vẫn chạy chậm. anh có cách nào chỉ em với? Thank .
Bạn thử cài thêm extension cache xem sao. Ví dụ: http://www.magetheme.com/magento-zoom-full-page-cache-extension/
em mới học Magen to và em dùng Magento 1.9.1, khi dùng hàm delete thì chương trình không chạy vào mà chạy vào hàm massDelete, anh cho em hỏi mình cần sửa thế nào ah
Rất hữu ích .
Cảm ơn nhiều.
[ Kính gửi anh em có chí hương khởi nghiêp ]
Chào các bạn,
Mình là founder H5S – Nhà 5s.
H̀ơn 1 năm trước mình có ý tưởng về ” Uber nhà trọ “. Sau đó mình chia sẻ ý tưởng cùng nhiều người và tham gia vào các cuộc thi khởi nghiệp .
Mình sống hết mình vì dự án, sáng thức dậy minh nghĩ về nó đầu tiên, trươc khi ngủ cũng nghĩ về dự án và thậm chí trong mơ mình cũng mơ về.
Kế hoach đã hoàn thành, nhà đầu tư cũng đã mong muốn được đầu tư chỉ ̀chờ sản phẩm ra mắt.
Nhưng mình gặp 1 chuyện không may, người cùng minh thực hiện dự án về lập trình đã không theo dự án được nữa vì phải đi qua Nhật thực hiện 1 dự án lớn.
Mình muốn kêu gọi ae cùng chí hướng tham gia khởi nghiệp cùng mình biến ý tưởng thành hiện thực giữ vai trò quản lý kĩ thuật về server cho dự án. Dự án đã phát triển xong front – end, Đang lập trình về mobile (ios, android) hiện có 2 đồng đội
Nhưng đang trống vị trí : Backend và xây dựng API. Code thì dùng framework php là codeigniter và bootstrap, dùng mysql làm database
Hãy tham gia dự án cùng mình. Mình đảm bảo BAN NGÀY bạn sẽ rât VẤT VẢ, ĐÊM về bạn sẽ KHONG THỂ NGỦ NGOǸ. Nhưng NGÀY KIA, đó sẽ là ngày TUYỆT VỜI.
Hãy liên hệ với với mình, chúng ta cùng làm 1 cốc cafe. Nếu đủ duyêṇ và có chung chí hướng, chúng ta sẽ đi cùng nhau.
Số điện thoại mình là 0946551777, Email nha5s.2016@gmail.com. Hãy cho mình biết về bạn qua link sau: https://goo.gl/6FrBSy