Bài 1: TỔNG QUAN VỀ DRUPAL, CÁCH VIẾT 1 MODULE CHO DRUPAL

We encourage users to post events happening in the community to the community events group on https://www.drupal.org.
king1031988's picture

1. HOOK
+ Hook được xem như là các event bên trong bộ nhân Drupal.
+ Chúng được gọi là các hàm callbacks.
+ Ví dụ : khi một user login vào drupal, Drupal sẽ phát ra hook user, nghĩa là lúc này tất cả các hàm hook user có trong tất cả các moudle sẽ được gọi.
+ Đây là cách phổ biến nhất để tương tác với nhân Drupal.

2. NODE
+ Các kiểu nội dung trong Drupal đều kế thừa từ kiểu cơ bản là node.
+ Ví dụ : blog entry, post, page, recipe… tất cả đều có cùng cấu trúc bên dưới giống nhau là node.
+ Cách tương tác với node là mở rộng chúng.
+ Ví dụ : các developer có thể thêm vào các node như : comment, file attachment, rate…
+ Bất kỳ node nào cũng có thể được đưa ra frontpage (trang chủ).

3. BLOCK.
+ Block là các khối nội dung có thể enable hoặc disable và được đặt vào một vị trí cụ thể trên site.
+ Ví dụ : user login là 1 block và thường được đặt ở left-sidebar. Bạn có thể tạo 1 block chứa số người đang truy cập…
+ Block thường được đặt ở left-sidebar, right-sidebar, header hoặc footer.

4. VAI TRÒ CỦA WEB-SERVER.
+ Drupal chạy bên dưới 1 web-server. Ví dụ : apache.
+ Nếu web-server có quan tâm đến file Drupal .htaccess, lúc đó một số thiết lập PHP sẽ được khởi tạo và sẽ có cơ chế clean URL.
+ Cơ chế clean URL : khi 1 request URL được gọi, vd : http://localhost:81/drupal/ttp/manager . Khi đó qui luật mod_write được định nghĩa trong file Drupal .htaccess sẽ chuyển URL lại thành : http://localhost:81/drupal/index.php?q=ttp/manager
+ Đường dẫn ttp/manager được gọi là đường dẫn bên trong (internal path) hay còn gọi là Drupal path.

5. CÁCH VIẾT 1 MODULE.
+ Module trong Drupal được xây dựng theo hướng modular và extensbile. Nghĩa là các người lập trình sẽ phát triển mà không thay đổi bộ nhân drupal.
+ Nếu ko thay đổi code của nhân Drupal thì làm sao tương tác với nó? Chúng ta sẽ tương tác bằng cách mở rộng thêm thông qua xử lý các event do nhân Drupal phát ra (hook).
+ Các bước để xây dựng 1 module :
- Tạo 1 folder lưu trữ các file của module.
- Tạo 1 file ten_module.info : để báo cho drupal biết thông tin về module của mình.
- Ví dụ : nội dung file ttp.info :

Code: Chọn hết
; $Id$
name = ttp
description = mo ta ve module.
package = ten goi.
version = "1.0”

+ Tạo file ten_module.module : cài đặt cho module của mình.
- Ví dụ : về cú pháp ghi chú trong file cài đặt :

Code: Chọn hết
<?php
// $Id$
/**
* @file
* Lets users add private annotations to nodes.
*
* Adds a text field when a node is displayed
* so that authenticated users may make notes.
*/

+ Cài đặt hook : trong suốt quá trình thực thi, Drupal sẽ gọi các module nếu nó cần thực hiện công việc.
Ví dụ : để quyết định xem module nào sẽ chịu trách nhiệm đáp ứng request, Drupal sẽ yêu cầu các module cung cấp đường dẫn mà nó giải quyết. Drupal làm điều này bằng cách lên danh sách các module và gọi hàm hook menu có trong mỗi module.
Cài đặt cho annotate_menu() :

Code: Chọn hết
/**
* Implementation of hook_menu().
*/
function annotate_menu($may_cache) {
$items = array();
if ($may_cache) {
$items[] = array(
'path' => 'admin/settings/annotate',
'title' => t('Annotation settings'),
'description' => t('Change how annotations behave.'),
'callback' => 'drupal_get_form',
'callback arguments' => array('annotate_admin_settings'),
'access' => user_access('administer site configuration')
);
}
return $items;
}

+ Khi Drupal hoàn tất việc yêu cầu các module tạo menu của chúng, nó sẽ lựa chọn hàm thích hợp để gọi cho request.

*** Thêm 1 Entry vào form :

Code: Chọn hết
/**
* Implementation of hook_nodeapi().
*/
function annotate_nodeapi(&$node, $op, $teaser, $page) {
switch ($op) {
case 'view':
global $user;
// If only the node summary is being displayed, or if the
// user is an anonymous user (not logged in), abort.
if ($teaser || $user->uid == 0) {
break;
}
$types_to_annotate = variable_get('annotate_nodetypes', array('story'));
if (!in_array($node->type, $types_to_annotate)) {
break;
}
// Add our form as a content item.
$node->content['annotation_form'] = array(
'#value' => drupal_get_form('annotate_entry_form', $node),
'#weight' => 10
);
}
}

+ Hook _nodeapi() sẽ được gọi khi Druapal thực hiện nhiều hoạt động với 1 node, nghĩa là tất cả các module (chẳng hạn là module của mình) có thể thay đổi node trước khi việc xử lý tiếp tục.

Comments

Chưa rõ lắm

HiepTTN's picture

Pro có thể nói rõ hơn về cài đặt Hook và thêm 1 entry form được không ? em mới học nên chưa hiểu lắm !:-s

Module và các thứ khác của

topiclawhn's picture

Module và các thứ khác của drupal được viết dưới dạng file .inc và .module .... nên hệ thống không tự chạy các file đó, tớ cũng đang nghiên cứu để viết ra một cms riêng !

Mời truy cập Vietdex.com là mạng hỏi đáp trực tuyến, Vietdex.net là mạng xã hội viết blog !

Tổng quan mà sơ sài quá bác

MrLand's picture

Kiến thức tổng quan nên đi sâu hơn về lí thuyết, bác lấy ví dụ nhiều và chi tiết tn cũng khó hiểu lắm. Lí thuyết đầy đủ, cụ thể mới có thể hiểu được à

Đọc vẫn chưa hiểu nhiều lắm ,

thaitambds's picture

Đọc vẫn chưa hiểu nhiều lắm , có hình ảnh hay cách tạo file gì đó thì khỏe hơn rùi :)

please

thaitambds's picture

mong bác chủ thớt có bài hướng dẫn đầy đủ hơn

Thanks

uitcode's picture

Thanks chủ thớt.

Chi tiết

nguyenthuylinh's picture

Bài viết rất chi tiết. tổng quát được những thông tin mà mình cần tìm hiểu. cám ơn bạn vì những chia sẻ.