cach dang ky m88 |

Viết Component Joomla 2.5 : Dùng JForm xây dựng màn hình nhập liệu

Tới giờ này giữa 4 thành phần gồm Joomla, Model, Controller, View thì chúng ta đã giải quyết và hiểu cách làm việc giữa

Joomla với Controller
Controller với View
Controller với Model

Còn mối quan hệ giữa Model và View chúng ta sẽ nói chuyện với nhau ở những phần sau qua các ví dụ cụ thể.

Bắt đầu từ đây chúng ta sẽ đi xây dựng lần lượt các chức năng làm việc với bảng jos_sach. Đầu tiên chúng ta sẽ xây dựng màn hình nhập dữ liệu (form nhập dữ liệu) cho bảng này. Xem lại lược đồ dữ liệu

Mở cơ sở dữ liệu và tạo các bảng tương ứng như trong lược đồ trên.

6.1 Tập tin sach.xml
Trong thư mục model của component com_sach tạo thư mục forms, trong thư mục này tạo tập tin có tên sach.xml và nhập nội dung như sau
<?xml version="1.0" encoding="utf-8"?>
<form>
<fieldset>
<field name="ten"
type="text"
label="Tên sách"
class="inputbox"
size="50"
required="true"/>

<field name="loai_id"
type="loai"
label="Thể loại" />

<field name="nam_xuatban"
type="text"
label="Năm xuất bản"
size="50"/>

<field name="lan_xuatban"
type="text"
label="Lần xuất bản"
size="50"/>

<field name="nha_xuatban"
type="text"
label="Nhà xuất bản"
size="50"/>

<field name="tacgia"
type="text"
label="Tác giả"
size="50"/>

<field name="gia"
type="text"
label="Giá"
size="50"/>

<field name="soluong"
type="text"
label="Số lượng"
size="50"/>
</fieldset>
</form>
Nội dung trong tập tin này rất quen thuộc, đúng vậy, chúng chính là những gì chúng ta đã làm trong phần tham số cho module ở những phần trước.

Mục đính của việc tạo ra tập tin này là để chúng ta tạo ra một form cho phép nhập liệu các thông tin của một cuốn sách.

Nếu đọc kĩ đoạn code xml trên, các bạn sẽ thấy có một loại field lạ đó là đoạn
<field name="loai_id"
type="loai"
label="Thể loại" />

Chắc chắn sẽ gây thắc mắc là cái field type là “loai” này ở đâu ra vì trong danh sách các field type hỗ trợ sẵn của Joomla2.5 không có type nào như vậy.
Ở đây, chúng ta muốn có một combo-box cho phép người dùng chọn thể loại của cuốn sách. Các option trong combo-box đó là các record lấy từ bảng jos_loai. Một loại field như thế không có sẵn mà chúng ta phải tự đi xây dựng.

Cách xây dựng gồm có 2 bước

Bước 1: Tạo thư mục fields trong thư mục models của component com_sach
Bước 2: Tạo tập tin loai.php và viết code như sau:

Có 3 điều mà các bạn cần lưu ý là

Lớp phải có tên là JFormField<tên loại field> kế thừa từ lớp JFormField (ở đây là lớp JFormFieldLoai)
Lớp phải có thuộc tính $type=”<tên loại field>” (ở đây là $type=”Loai”)
Tập tin định nghĩ

a lớp phải có tên <tên loại field>.php (ở đây là tập tin loai.php)

Phương thức input có nhiệm vụ thực hiện truy vấn dữ liệu từ bảng jos_loai, tạo ra combo-box (dòng 20) và trả về combo-box đã tạo.

Các bạn cũng nhớ thêm một vài record vào bảng jos_loai để chúng ta test trong quá trình xây dựng các thành phần làm việc với đối tượng sách.

6.2 Lớp SachModelSach
Ta viết mã cho lớp SachModelSach như sau

Trong đoạn mã trên, chúng ta định nghĩa phương thức có tên getForm(). Dòng số 9 của phương thức này thực hiện việc đọc tập tin sach.xml trong thư mục com_sach/models/forms/ chúng ta mới viết và tạo ra một đối tượng thuộc lớp JForm và trả đối tượng đó về cho lời gọi phương thức.

6.3 Phương thức editView của lớp SachViewSach
Chúng ta sẽ viết lại phương thức edit của lớp SachViewSach. Phương thức này có nhiệm vụ lấy đối tượng form từ model qua phương thức getForm() và hiển thị form đó lên trang web. Ở đây có 2 việc phân biệt gồm lấy đối tượng form và hiển thị. Chúng ta sẽ để việc hiển thị này cho tập tin layout có tên là edit.php thực hiện. Mã nguồn của phương thức editView() sẽ được thay đổi lại thành như sau:

Dòng số 60 chúng ta đã làm 2 việc

Lấy về đối tượng form thong qua phương thức $this->get(‘Form’)
Dùng phư

ơng thức $this->assignRef($key,$value) để lưu giữ giá trị đó chuẩn bị cho layout hiển thị.

Dòng số 61 khá đơn giản, nó nói cho lớp SachViewSach biết là chúng ta muốn sử dụng tập tin edit.php trong thư mục com_sach/views/sach/tmpl để xử lý việc hiển thị nội dung lên trên trang.

Câu lệnh parent::display() có nghĩa chúng ta gọi trực tiếp phương thức display() của lớp cha (JView), phương thức này dựa vào layout đã được thiết lập (ở phương thức editView) mà include tập tin tương ứng (edit.php).

6.4 Tập tin layout edit.php
Ở phần trên, chúng ta đã nói nhiều tới tập tin edit.php nằm trong thư mục com_sach/views/sach/tmpl. Để thống nhất thuật ngữ chúng ta thỏa thuận với nhau là sẽ gọi các tập tin trong thư mục tmpl này là các layout.

Các bạn nhận thấy một điều là trong lớp SachViewSach chúng ta phải hiển thị 2 màn hình riêng biệt

Màn hình danh sách các cuốn sách (grid)



n hình sửa/thêm một cuốn sách (form)

Mã hiển thị thường là mã html và rất dài, để lớp View được gọn gàng và dễ chỉnh sửa chúng ta không muốn có mã nguồn html nằm ở đây. Thêm nữa một phiên làm việc chúng ta chỉ hiển thị hoặc màn hình grid hoặc màn hình form mà thôi. Vậy sẽ tốt hơn nếu hiển thị màn hình nào thì chỉ mã nguồn html của màn hình đó được include. Đây là 2 lý do tạo nên sự ra đời của layout. Không chỉ trong Joomla mà trong các hệ thống web khác thông thường người ta cũng vẫn làm như vậy.

Tập tin edit.php sẽ có mã nguồn như sau:

Ở đây, chúng ta lần lượt lấy về các thành phần đã định nghĩa trong tập tin sach.xml và kết hợp với html để hiển thị lên trang. Nếu mọi chuyện diễn ra tốt đẹp, các bạn mở màn hình danh sách sách  bấm nút New sẽ hiển thị màn hình form mà chúng ta vừa cố công đi tạo như sau:

Việc tiếp theo mà chúng ta đều muốn làm đó là lưu các dữ liệu người dùng đã nhập vào form sau khi người dùng nhấn nút Save & Close trên thanh Toolbar.

Hổ trợ

Hổ trợ Hữu Phát

Nhân viên tư vấn thiết kế website Mr. Hữu -
Tư vấn Thiết kế website
0188.525.0716 
Yahoo
 
Nhân viên tư vấn thành lập công ty Mrs. Loan -
Tư vấn thành lập công ty
09.798.17170 
Yahoo
 
Nhân viên hổ trợ kỷ thuật mạng Mr. Công -
Nhân viên kỹ thuật
0985.012.596 
Yahoo
 

Tìm kiếm

Thanh toán:

Trao đổi backlink :
thiet ke website binh duong | thiết kế web tại bình dương |

quang cao google tai binh duong | quang ba web o binh duong |