Thứ Hai, 15 tháng 7, 2013

CCK, Views và Panels trong Drupal

Nói tới Drupal với người mới tiếp cận hoặc tiếp cận qua rồi bỏ chạy sẽ nói rằng nó thật phiền phức, khó hiểu và không tiện lợi một chút nào. Tuy nhiên đó chỉ là những lời nhận xét khi sự hiểu biết về Drupal chưa được nhiều. Tạm thời mình nói thế và mình xin lỗi những ai bị ảnh hưởng bởi câu nói này nhé! Nếu bạn đã tới với Drupal rồi hãy chịu khó tìm hiểu 3 module mình nói ở trên nó sẽ giúp bạn làm được mọi thứ và làm một cách đơn giản tới bất ngờ không phải code mới thích chứ! He he!

Với những trang tin tức như Vnexpress hoặc khó khăn hơn là mạng xã hội khi bạn sử dụng Drupal để làm bạn sẽ thấy nó thật sự rất phù hợp. Bởi vì core Drupal đã hỗ trợ tốt những thứ này rồi các bạn ạ!

Triết lý của Drupal

Với Drupal mọi thứ đều là node và hình như chỉ trừ có comment không phải là node mà thôi - mình nhớ là như thế bởi nếu cần rõ hơn bạn đọc cuốn “Pro Drupal Developmen” sẽ hiểu rõ hơn, mình giờ ngại mở sách ra lắm, hi hi. Mọi thứ đều là node đó là triết lý của Drupal. Node là kiểu dữ liệu nhỏ nhất với hai trường dữ liệu cơ bản nhất đó là title và body để lưu thông tin. Ngoài ra còn có các trường thông tin khác như: ngày tháng tạo bài, ngày cập nhật, … tuy nhiên mình sẽ không trình bày ở đây mà chỉ nói về hai trường dữ liệu quan trọng kia thôi. Bạn hãy tưởng tượng node là một cái chung nhất trong việc lưu nội dung. Bạn sẽ thấy với hai cái này cơ bản đã lưu đủ thông tin rồi. Bạn thấy trên các site thì cái gì mà chả có tiêu đề và nội dung. Node giống như là dàn bài cho một bài viết vậy.

Khái niệm kiểu nội dung và mở rộng kiểu nội dung

Trong Drupal mọi thứ đều là node. Tuy nhiên thực tế có những thứ cần lưu nhiều thông tin hơn node và vì thế có một khái niệm mới đó là kiểu nội dung. Kiểu nội dung là node nhưng có bổ xung thêm một số trường để lưu thêm thông tin. Ví dụ trong bài viết bình thường có tiêu đề và nội dung. Tuy nhiên trong một số bài viết cấp cao hơn như trang tin tức bạn cần đưa thêm ảnh cho bài viết, rồi trường video quảng cáo, câu hỏi thăm dò, … lúc này ta có được một kiểu nội dung mới tên là trang tin chẳng hạn. Thì trang tin chính là một kiểu nội dung và bạn đi tới hai kết luận:

Kiểu nội dung là node nhưng bổ xung thêm một số trường thông tin khác. Việc bổ xung thêm trường thông tin khác này người ta gọi là mở rộng kiểu nội dung.

Chúng ta dễ thấy mô hình node và kiểu nội dung giống như kế thừa trong lập trình hướng đối tượng vậy. Chúng ta có lớp cha cơ bản nhất và lớp con chỉ cần bổ xung thêm thông tin từ cha là ta có một kiếu lớp mới mà thôi. Theo mình khi nói về node và kiểu nội dung mọi người nên liên hệ tới tính kế thừa trong lập trình hướng đối tượng sẽ dễ hiểu hơn rất nhiều.

À quên, mình chưa nói thêm một điều. Các kiểu nội dung bản chất là node. Tuy nhiên trong node có một trường khá quan trọng đi cùng với title và body đó là trường “type”. Trường “type” này giúp ta phân biệt các kiểu nội dung và node với nhau. Biết được nó sẽ giúp bạn dễ dàng hiểu được vai trò của Views mà mình trình bày trong phần tiếp theo.

Hình dung về cách lưu thông tin trong Drupal

Bây giờ mình sẽ hình dung về cách lưu thông tin trong Drupal theo ý hiểu của mình nhé! Chúng ta tự tưởng tượng ra cho dễ hiểu mà thôi! Chứ bản chất sâu xa mọi thứ là bít 0 và 1 mà, he he! Cách hiểu này do mình tưởng tượng ra mà thôi! Không có sách vở nào dậy thế này đâu nhé!

Chúng ta bắt đầu tưởng tượng nhé! Chúng ta có một dây dài trên đó có treo các tờ giấy khác nhau với đủ các hình dạng khác nhau. Các tờ giấy này cứ nối tiếp nhau theo thứ tự đánh số: 0, 1, 2, … Và ta gọi là node 0, node 1, … Các tờ giấy này tuy khác nhau nhưng đều là tờ giấy cả. Chúng chỉ được phân biệt nhau bởi tên gọi của loại giấy mà thôi. Lúc này bạn hãy nghĩ giấy nói chung là node còn các loại giấy khác nhau chính là kiểu nội dung. Sự phân biệt các loại giấy nhờ tên loại giấy giống như các kiểu nội dung phân biệt với nhau bởi trường “type” vậy. Và để đơn giản chúng ta hãy cứ nghĩ drupal lưu thông tin bằng dãy dài các node và kiểu nội dung lẫn lộn nhé!

Các khái niệm mới định hình

Phần trên mình đã trình bày về các khái niệm cơ bản của Drupal. Và bây giờ mình sẽ chỉ ra các yêu cầu đặt ra để giúp bạn hiểu rõ hơn.

Thứ nhất: Giữa node và kiểu nội dung khác nhau bởi các trường dữ liệu bổ xung do đó việc bổ xung này gọi là mở rộng kiểu nội dung. Và chúng ta cần có cơ chế mở rộng kiểu nội dung. Thực tế có hai cách cơ bản:


* Cách thứ nhất là viết code mở rộng cho kiểu nội dung này. Cách này bạn sẽ thấy chính là cách viết module cho việc thực hiện việc này. Tuy nhiên mình không trình bày ở đây bởi vì nếu làm kiểu này thì Drupal chả khác các CMS khác như Joomla, Drupal hay Wordpress là mấy.
* Cách thứ hai là có một module thực hiện cho bạn việc làm này một cách trực quan mà bạn chỉ cần khai báo mà thôi đó chính là CCK. CCK giúp bạn kiến tạo ra các nội dung khác nhau mà không phải code. Và bạn thấy trong Drupal các CCK có rất nhiều. Ví dụ: trường ảnh, trường video, trường link, … Có rất nhiều các loại CCK giúp bạn tạo ra đủ các loại nội dung khác nhau theo ý thích. Bạn chỉ cần vào Drupal.org tải về mà thôi!
Đó là vai trò của CCK. CCK giúp bạn mở rộng kiểu nội dung mà không cần code.

Thứ hai: Yêu cầu về lọc lấy các kiểu nội dung theo yêu cầu, bởi vì bạn không thể hiển thị tất cả các nội dung mà không phận loại ra được. Bạn cần phải lấy các nội dung theo một yêu cầu nào đó như kiểu, thời gian tạo, … và khái niệm Views ra đời.

Views là một bộ lọc có vai trò lọc và trình bày nội dung.

Đó là định nghĩa của Views do mình diễn nôm ra mà thôi! He he! Qua đó, bạn thấy vai trò của Views gồm hai phần đó là lọc và trình bày nội dung. Mình sẽ nói về hai cái này.

* Lọc nội dung: View giúp bạn lọc các kiểu nội dung bạn cần theo một số điều kiện bạn đặt ra. Ví dụ bạn cần lấy ra 6 bài viết mới nhất hoặc bạn bạn lấy ra các bài viết thuộc chủ đề “tin thế giới’. Đó là vai trò chính của Views. Views giúp bạn lấy ra các nội dung mà bạn cần.
* Hiển thị nội dung: Sau khi lọc các nội dung ra bạn có được danh sách các nội dung bạn cần hiển thị. Tuy nhiên bạn muốn trình bày các kiểu nội dung này theo các cách khác nhau. Ví dụ bạn muốn trình bày dạng bảng các nội dung, hoặc danh sách các nội dung. Ngoài ra để tạo hiệu ứng đẹp bạn có thể trình bày theo kiểu slide nghĩa là cứ mấy giây lại có một nội dung xuất hiện thay thế nội dung đã trình bày. Qua đây bạn thấy được vai trò thứ hai của Views là trình bày các nội dung đã lọc ra được.
Việc lọc các nội dung thì module Views đã hỗ trợ đầy đủ và việc hiển thị module này cũng đã hỗ trợ 4 dạng hiển thị cơ bản thì phải. Tuy nhiên để tạo cách trình bày nội dung phong phú bạn có thể tải thêm các module Views bổ xung khác phục vụ việc trình bày nội dung thật đẹp ví dụ như module Views Slideshow, Views Tab, … Với mình, mình không cần dùng thêm các module Views bổ xung đó mà mình chỉ dùng mỗi module Views mà thôi. Mình chỉ cần chức năng lọc của Module Views còn việc trình bày mình sẽ tự override các hàm kết xuất giao diện và tích hợp Jquery plugin vào để tạo ra các kiểu trình bầy nội dung linh hoạt và đẹp hơn rất nhiều.

Như vậy qua giới thiệu của mình bạn đã thấy được CCK giúp tạo ra kiểu nôi dung mới và Views giúp bạn lọc nội dung và trình bầy nội dung. Bạn thấy chỉ có Views và CCK bạn đã có thể làm mọi thứ mà không phải viết code rồi. Công việc của bạn chỉ là khai báo và chỉnh CSS mà thôi! Đó chính là điều mạnh nhất của Drupal mà các CMS khác không có được. Các CMS khác muốn có kiểu nội dung mới phải viết module còn Drupal chỉ cần khai báo mà không phải viết mới tuyệt vời cơ chứ!

Về cơ bản chỉ cần CCK và Views đã giúp bạn làm được mọi thứ rồi! Tuy nhiên mình sẽ trình bày thêm Panels cho đủ bộ. He he!

Panels giúp chia nhỏ phần nội dung thành các vùng bé hơn

Drupal trình bày giao diện thành các vùng để chứa các block - block là các phần nội dung. Thường thì một theme của drupal có một số vùng cơ bản: header, footer, content, sidebar left, sidebar right. Các vùng này bao quanh vùng nội dung. Ngoài ra bạn có thể thêm nhiều vùng vào theme tùy ý đó chính là sự uyển chuyển của Drupal. Tuy nhiên bạn thấy như các trang báo họ chia vùng nôi dung (vùng content) thành các phần nhỏ hơn để tiện trình bày. Ví dụ họ chia vùng content thành cột trên đầu chứa tin nóng, hai cột hai bên chứa các block có các bài viết được phân loại. Việc chia này giống như bạn sử dụng layout trong Word vậy. Layout giúp bạn trình bầy nội dung dạng cột báo thì Panels cũng làm nhiệm vụ này cho phần nội dung(vùng content) của theme. Panels giúp chia phần nội dung thành các phần nhỏ hơn và trên mỗi phần đó chứa các block nội dung của bạn.

Như vậy bạn đã thấy được CCK, Views, Panels đã giúp bạn trực quan hóa việc tạo ra các kiểu nội dung và trình bầy nội dung mà không phải lập trình. Nhờ có 3 module này sẽ giúp bạn có thể làm được mọi thứ mà không phải code. Thay vào việc code bạn sử dụng 3 module cơ bản trên để khai báo mà thôi! Chính nhờ việc làm này mà bạn đã có thể làm mọi thứ theo ý mình. Và bạn sẽ thấy Drupal thật tuyệt vời phải không?

Tóm lại: Các khái niệm bạn cần nhớ qua bài viết này:

* CCK giúp ta mở rộng kiểu nội dung mà không cần viết code
* Views giúp ta lọc và trình bày các nội dung mà không cần code
* Panels giúp ta chia phần nội dung thành các vùng bé hơn cũng không cần code
* Nhờ CCK, Views, Panels bạn có thể làm gần như mọi thứ mà không phải viết code
Chú ý: Trong bài viết này mình chỉ viết theo kinh nghiệm phát triển ứng dụng của mình trên Drupal và theo ý hiểu của bản thân. Nếu có chỗ nào sai mong các bạn chỉ bảo cho nhé!

Mình đã làm được rất nhiều thứ trên Drupal mà chưa phải viết một module nào. Chính xác từ khi học và làm Drupal tới giờ mình chỉ đọc lướt qua phần dạy viết module mà chưa hề đọc kỹ và viết một module nào dù bé nhất. Với mình chỉ CCK, Views và JQuery là quá đủ để làm mọi thứ rồi!

Mình dùng khái niệm không phải viết code ở đây là không phải viết code trên PHP nhé! Việc làm CSS và HTML mình không coi là code đâu các bạn ạ! Với mình CSS và HTML chỉ là cách trình bầy như Word thôi để tránh trường hợp các bạn lại bảo code CSS và HTML thì chết! Hi hi!

Khi làm việc với Drupal mình chỉ tâm niệm và tin tưởng một điều: “với Drupal mình có thể làm mọi thứ và mọi thứ đó đều được làm bởi một cách rất đơn giản và dễ dàng”.

Không có nhận xét nào:

Đăng nhận xét

Học lập trình web căn bản với PHP

Bài 1: Các kiến thức căn bản Part 1:  https://jimmyvan88.blogspot.com/2012/05/can-ban-lap-trinh-web-voi-php-bai-1-cac.html Part 2:  https://...