CCK, Views và Panels trong Drupal

Events happening in the community are now at Drupal community events on www.drupal.org.
phanvanlan's picture

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”.

http://blog.manhlq.com/e-donald-solution/cck-views-va-panels-trong-drupal/

Comments

Bài viết hay, Và

cuxi's picture

Bài viết hay, Và nhường như vậy sử dụng thành thạo các modules do các deverlop của drupal viết cck, view, panel ta đủ để tạo ra những website theo ý mình.

Tran Tan
Tel : 0905 403 723
http://baogame.vn/
http://Bienhoa.vn/

Drupla hay thật vui thật.

vn271's picture

Bài viết hay:
- Một cách tích cực của drupal là , giúp các developer làm giàu.
- Một cách tiêu cực của drupal là : thầy tớ bảo thời gian gần đây các developer càng ngày càng lười đi và ngu đi nhiều .
Ko biết có phải do mấy cái anh nhanh tiện rễ ko phải động vào code này ko nhỉ .

  • Tích cực nữa là: May là h vẫn còn chỗ cho chúng ta tạo các module hay và có một chỗ để chúng ta hoàn thiện code, học hỏi được nhiều.
    Lập trình thì yêu lắm nhưng: @me tự cảm thấy mình ngu thiệt

Bài viết hay

dom.killer's picture

Cảm ơn bạn kylanvn vì bài viết hay.

~vn271: Đúng đấy, càng nhiều người trở thành coder (thợ) chứ không còn là developer (nghệ nhân) nữa.

Bài viết rất hay

tiendx2002's picture

@Cương dev nào giàu đâu? Team đang đói nặng kia kìa.
@domkiller: developer hay coder thì có khác gì nhau chỉ là cái tên mà thôi, đáng nói là bạn làm cái gì và bạn có thích việc làm đó hay không thôi, nếu đã không thích thì có làm Thủ Tướng cũng chả thú
@kylanvn: bài viết rất hay, thanks. Chat nhảm tí sorry.
http://codeandmore.com

Re: Bài viết rất hay

vn271's picture

@Tiendx: hì em nhầm chuyện giàu có.
- Quá hay câu : "có thích việc làm đó hay không" em thấy đa số dân lập trình đều yêu nghề của mình.
em thì có mấy người bảo làm việc ngon hơn cũng ko thích.

Cho mình hỏi tý

Jimmy.dexp's picture

Chào mọi người!

Theo bài viết của kylanvn thì mình thấy CCK,Views and Panel trong Drupal là rất hay nhưng theo mình nghĩ nó chỉ hay khi thực hiện những trang web kiểu CMS còn những website dạng web application mà khách hàng quan tâm đến bản Design Database thì liệu nó còn hay nữa không?Bởi khi dùng CCk, Views and Panel thì bắt buộc Database phải tuân theo cấu trúc của Drupal chứ không theo ý của người phát triển được.Các bạn nghĩ sao về điều này.

Thanks!

Views 2 cho phép xây

thehong's picture
  1. Views 2 cho phép xây dựng các view từ các nguồn khác nhau, (ở v1 nó gắn liền với node) + Khả năng định nghĩa template thay thế mạnh
  2. Từ panels 1 bạn đã có thể định nghĩa kiểu nội dung tự tạo để nhét vào pane rồi. hook để alter, template override cũng khá đầy đủ. Thí dụ: module CCK đã định nghĩa 'field' content type (content type này là hiểu theo ngữ cảnh của panels).
  3. CCK, cấu trúc DB của nó cũng khá đẹp rồi. Tuy nhiên, nếu muốn chế biến field riêng, để có cấu trúc db riêng, bạn cũng có thể.

=> không có hạn chế như bạn nghĩ.

Tuy nhiên, như TH đã nói vài lần, sử dụng tụi này, phụ thuộc nhiều modules, site chạy chậm như con rùa.

--
Only local images are allowed.

Chào mọi người

Jimmy.dexp's picture

Dear,

Cảm ơn thehong.Nhưng bạn có thể nói rỏ hơn một chút về vấn đề dùng CCK để chế biến field riêng, để có cấu trúc db riêng theo như ý người phát triển chứ ko theo cấu trúc node dc ko?

thanks!

Jimmy.dexp's picture

Làm thế nào để dặt form add và form view trên cùng một trang(sử dụng CCK và View).
Ví dụ như form dưới đây(image kem theo):

hi

thotran's picture

tu viet dua tren cai view cua han ay ban Hue ah

Bạn nên trở lại học

thehong's picture

Bạn nên trở lại học cách sử dụng Form API, theming trước khi bay quá cao, bay quá xa.

--
Only local images are allowed.

Good place to hire Drupal experts

HI

thotran's picture

Noi vay thoi cho tui cung chua lam duoc ma tui cung khong thay trang nao lam kieu do. Neu bac ma da tao duoc roi thi help cho tui voi. Thanks bac truoc

Có 2 cách để tạo pages:

ngudan's picture

Có 2 cách để tạo pages:
- Cách 1: dùng modules panel + kích hoạt page manager trong CCK là tạo được 1 pages, sau đó thích chèn gì vào trang thì tuy(như view, blog..), dùng panel có thể chia các khối, đặt id, class mình thấy nhanh.

Cách 2: dùng modules context:
+tạo view, blog...sau đó ra tạo context add vào các khối.
=> 2 cái này chức năng giống nhau là tạo ra pages để add nội dung, mọi người cho em ý kiến là dùng theo cách nào hay hơn ? tối ưu hơn ?

tương tự như modules "admin_menu" và module "admin" đều có chức năng giống nhau.

Thế Hồng nói đúng đó hue.nguyen

tiendx2002's picture

Bạn chưa hiểu gì về Drupal mà cứ đặt câu hỏi cao siêu làm các expert phải rối cả lên. (Thực ra câu hỏi này cũng không có gì cao siêu lắm, nếu mình là Drupal Expert thì mình có thể tìm cách trả lời cho bạn thỏa mãn được ngay).
Tốt nhất nếu là Expert thì bạn phải tự tìm cách trả lời các câu hỏi dạng đó (như về database), còn nếu không, thì chỉ nên đặt các câu hỏi new bie (cách đặt form view) thôi, đến khi bạn vững rồi thì hãy đặt các câu hỏi sâu.
Thân mến.
http://codeandmore.com

CCK & VIEW

dracula83's picture

Mình đang giải quyết một bài toán thế này:
Có 2 đối tượng là:Project và Document thuộc Project đó.
Làm thế nào để khi viewdetail một Project thì fải list ra danh sách các Document thuộc Project đó trong trang viewdetail(thông tin của Project + danh sách document thuộc Project đó)
Nếu code một module riêng thì mình giải quyết được nhưng dùng các module co sẵn của Drupal thì mình loay hoay mãi mà vẫn chưa làm được.
Ai biết chỉ giúp mình với
thanks nhiều!

Ko biết mình có hiểu câu hỏi của bạn ko

giapdq's picture

Bạn hỏi hơi khó hiểu, Nếu mình hiểu đúng thì module này chắc là có thể giúp được bạn
http://drupal.org/project/references

Ko biết mình có hiểu câu hỏi của bạn ko

giapdq's picture

Bạn hỏi hơi khó hiểu, Nếu mình hiểu đúng thì module này chắc là có thể giúp được bạn
http://drupal.org/project/references

http://www.weblaptrinh.vn/

Không co gì bàn

nguyenxuannghia's picture

xem các bác nói chuyện cao siêu quá. hơ hơ

Cảm ơn bạn phanvanlan

zoneroyal's picture

Sau khi đọc qua bài viết, tôi đã hình dung ra phần nào cách thức hoạt động của Drupal.

Một cái nhìn tương đối hay đấy!

ngonlion's picture

Thật tuyệt vời, va thật là may mắn khi mình đã được đọc bài viết này của ban. Minh đã có được một tư tưởng khá là thoải mái rồi. vì lúc đầu mình thấy rất khó hinh dung về Drupal! cảm ơn bạn nhiều!

chỉ giùm mìn thank nhiều

theboyofsea's picture

cho hỏi cái form này sử dụng cái module nào làm vậy anh em http://caribbeanresumes.com/node/add/resume

mình là người mới tham gia

jw.tinh's picture

mình là người mới tham gia vào cộng đồng drupal.các bạn ai có ít kiên thức cơ bản về drupal thì chí giáo giúp mình với.mình chí mới biết cài đặt thôi.còn mấy cái như mấy bạn nói đây thì mình chưa hiểu lắm.mong mọi người giúp đỡ

nên dùng panel hay context ?

ngudan's picture

các bác chỉ cho em nên dùng panel hay context để tạo page ?
Em dùng page tạo khối để phân khu vực rồi chèn content thấy dễ hơn nhưng em thấy bảo cái này không tối ưu như context.
em dùng context thì trang node phải viết code để làm , cũng như trang đó rất khó đặt class và id.
vậy các bác tư vấn cho em hỏi lên dùng cái nào hơn ? cái nào tối ưu hơn ? (không quan trọng làm nhanh hay không)

Có 2 cách để tạo pages

ngudan's picture

Có 2 cách để tạo pages:
- Cách 1: dùng modules panel + kích hoạt page manager trong CCK là tạo được 1 pages, sau đó thích chèn gì vào trang thì tuy(như view, blog..), dùng panel có thể chia các khối, đặt id, class mình thấy nhanh.

  • Cách 2: dùng modules context:
    +tạo view, blog...sau đó ra tạo context add vào các khối.
    => 2 cái này chức năng giống nhau là tạo ra pages để add nội dung, mọi người cho em ý kiến là dùng theo cách nào hay hơn ? tối ưu hơn ?

tương tự như modules "admin_menu" và module "admin" đều có chức năng giống nhau.

Các pr0 cho mình hỏi là trong

maudonrung's picture

Các pr0 cho mình hỏi là trong drupal 6 thì những module nào có thể hiện được "Có 2 đối tượng là:Project và Document thuộc Project đó.
Làm thế nào để khi viewdetail một Project thì fải list ra danh sách các Document thuộc Project đó trong trang viewdetail(thông tin của Project + danh sách document thuộc Project đó)" vì thằng "http://drupal.org/project/references" chỉ dùng cho drupal 7 thôi.
Thanks các pr0

Không thằng nào biết à

ngudan's picture

Cái bọn trên Group này toàn ăn sẵn chẳng chịu comment gì
Hay chúng mày đéo biết gì , lập group làm lồn gì

Dũng cảm !

luatviettin's picture

Bạn thật dũng cảm, những người chịu khó ăn sẵn như bạn chả mấy mà giàu !

Moi người ai cũng có việc,

nguyentran's picture

Moi người ai cũng có việc, tranh thủ được sẽ giúp bạn. Bạn nói như vậy tôi nghĩ mọi người sẽ tránh xa bạn hơn.

Bài viết rất hay!

thietbidiencamtay's picture

Bài viết rất hay, cảm ơn chủ thớt nhé!