Module mẫu: rss_footer

Ở bài viết này, tôi sẽ trình bày từng bước phát triển một module với chức năng khá đơn giản: thêm một chuỗi tùy biến ở dưới mỗi bản tin khi được xem ở dạng RSS.

- Tên của module: rss_footer
- Cấu trúc thư mục và tập tin:

  1. ./sites/all/modules/
  2. ./sites/all/modules/rss_footer/
  3. ./sites/all/modules/rss_footer/rss_footer.info
  4. ./sites/all/modules/rss_footer/rss_footer.module

- Các hàm Drupal API sử dụng: hook_perm(), hook_menu(), hook_nodeapi()

1. Giới thiệu cho Drupal biết module

Mở tập tin rss_footer.info, thêm vào nội dung

  1. name = "RSS Footer"
  2. description = "Add customize text in the footer of RSS item.";
  3. package = "Andy"
  4. version = "5.x-1.x-dev"

2. Định nghĩa quyền hạn

Module của chúng ta sẽ có một quyền hạn, với tên là rss_footer-admin (điều hành module rss_footer). Mở tập tin rss_footer.module, định nghĩa hàm sau:

<?php
/*
 * Đây là hàm mở rộng từ hook_perm()
*/
function rss_footer_perm () {
  return array(
'rss_footer-admin');
}
?>

3. Định nghĩa các trang

Chúng ta sẽ định nghĩa trang điều hành của chúng ở ?q=admin/content/rss_footer, người truy cập trang này phải có quyền 'rss_footer-admin'. Mở tập tin rss_footer.module, định nghĩa hàm sau:

<?php
/*
 * Hàm này là mở rộng của hook_menu()
 * Khi tạo trang, Drupal sẽ gọi hàm drupal_get_form()
 * với tham số truyền vào là mảng
 * được trả về từ hàm rss_footer_admin()
*/
function rss_footer_menu () {
  return array(
    array(
      
'path' => 'admin/content/rss_footer',
      
'title' => t('RSS footer'),
      
'access' => user_access('rss_footer-admin'),
      
'callback' => 'drupal_get_form',
      
'callback arguments' => 'rss_footer_admin'
    
)
  );
}
?>

4. Định nghĩa thao tác xử lý

Khi người dùng xem trang ?q=admin/content/rss_footer, một form sẽ xuất ra. Hàm sau, được định nghĩa trong tập tin rss_footer.module, định nghĩa thao tác mà Drupal sẽ xử lý khi form được đệ trình (submit):

<?php
/*
 * Mở rộng của hook_submit()
*/
function rss_footer_admin_submit($form_id$form_values){
  
variable_set('rss_footer_content'$form_values['rss_footer_content'] );
  
drupal_set_message('Saved your rss footer content.''status');
}
?>

5. Xử lý nội dung được trình bày ở bản tin RSS

Hàm sau, được định nghĩa trong tập tin rss_footer.module, thực hiện việc hàm nội dung tùy biến vào phía dưới của mỗi mẫu tin:

<?php
/*
 * Mở rộng của hook_nodeapi()
*/
function rss_footer_nodeapi (&$node$op$a3 null$a4 null) {
  static 
$rss_footer_content;
  if(
$op == 'rss item'){
    if(!isset(
$rss_footer_content)){
      
$rss_footer_content variable_get('rss_footer_content','');
    }
    
$node->teaser .= "<br /><br />- - - - - - - - - - <br />".$rss_footer_content;
  }
}
?>

Thế Hồng