Bài 1: TỔNG QUAN VỀ DRUPAL, CÁCH VIẾT 1 MODULE CHO DRUPAL
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
+ 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”
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.
- 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.
Không có nhận xét nào:
Đăng nhận xét