Module cần có 2 file là :
- .info
- .module
Vậy đầu tiên , ta cần tạo file info . Tôi viết ứng dụng get file XML từ trang http://www.goodreads.com/review/list_rss/398385?shelf=history-of-philosophy . Và đưa về module trang web của mình :
đầu tiên tạo thư mục goodreads . Trong đó tạo 2 file goodreads.info và goodreads.module .
2 File có nội dung như sau :
- .info
- .module
Vậy đầu tiên , ta cần tạo file info . Tôi viết ứng dụng get file XML từ trang http://www.goodreads.com/review/list_rss/398385?shelf=history-of-philosophy . Và đưa về module trang web của mình :
đầu tiên tạo thư mục goodreads . Trong đó tạo 2 file goodreads.info và goodreads.module .
2 File có nội dung như sau :
File goodreads.info có nội dung như sau :
;$Id$ name = "Goodreads Bookshelf" description = "Displays items from a Goodreads Bookshelf" core = 6.x php = 5.1name và description chỉ đơn giản là mô tả môdule .
File con chính : goodreads.module có nội dung :
<?php // $Id$ /** * @file * Module for fetching data from Goodreads.com. * This module provides block content retrieved from a * Goodreads.com bookshelf. * @see http://www.goodreads.com */ /** * Implementation of hook_block() */ function goodreads_block($op='list' , $delta=0, $edit=array()) { switch ($op) { case 'list': $blocks[0]['info'] = t('Goodreads Bookshelf'); return $blocks; case 'view': $url = 'http://www.goodreads.com/review/list_rss/' .'398385' .'?shelf=' .'history-of-philosophy'; $blocks['subject'] = t('On the Bookshelf'); $blocks['content'] = _goodreads_fetch_bookshelf($url); return $blocks; } } /** * Retrieve information from the Goodreads bookshelp XML API. * * This makes an HTTP connection to the given URL, and * retrieves XML data, which it then attempts to format * for display. * * @param $url * URL to the goodreads bookshelf. * @param $num_items * Number of items to include in results. * @return * String containing the bookshelf. */ function _goodreads_fetch_bookshelf($url, $num_items=3) { $http_result = drupal_http_request($url); if ($http_result->code == 200) { $doc = simplexml_load_string($http_result->data); if ($doc === false) { $msg = "Error parsing bookshelf XML for %url: %msg."; $vars = array('%url'=>$url, '%msg'=>$e->getMessage()); watchdog('goodreads', $msg, $vars, WATCHDOG_WARNING); return t("Getting the bookshelf resulted in an error."); } return _goodreads_block_content($doc, $num_items); // Otherwise we don't have any data } else { $msg = 'No content from %url.'; $vars = array('%url' => $url); watchdog('goodreads', $msg, $vars, WATCHDOG_WARNING); return t("The bookshelf is not accessible."); } } /** * Generate the contents of a block from a SimpleXML object. * Given a SimpleXML object and the maximum number of * entries to be displayed, generate some content. * * @param $doc * SimpleXML object containing Goodreads XML. * @param $num_items * Number of items to format for display. * @return * Formatted string. */ function _goodreads_block_content($doc, $num_items=3) { $items = $doc->channel->item; $count_items = count($items); $len = ($count_items < $num_items) ? $count_items : $num_items; $template = '<div class="goodreads-item">' .'<img src="%s"/> %s by %s</div>'; // Default image: 'no cover' $default_img = 'http://www.goodreads.com/images/nocover-60x80.jpg'; $default_link = 'http://www.goodreads.com'; $out = ''; foreach ($items as $item) { $author = check_plain($item->author_name); $title = strip_tags($item->title); $link = check_url(trim($item->link)); $img = check_url(trim($item->book_image_url)); if (empty($author)) $author = ''; if (empty($title)) $title = ''; if (empty($link) !== 0) $link = $default_link; if (empty($img)) $img = $default_img; $book_link = l($title, $link); $out .= sprintf($template, $img, $book_link, $author); } $out .= ' <div class="goodreads-more">' . l('Goodreads.com', 'http://www.goodreads.com') .'</div>'; return $out; }
Giải thích : 1 : Code trên không cần dấu tag đóng ?> vì khi có nó thì nếu kết quả trả về có khoản trắng sẽ không tốt cho website lắm . 2 : Ta cần chú ý biến $op . $op là biến quan trọng của drupal, nó có các tham số quan trọng là : + Configure . + List . + View ... Đầu tiên :
case 'list': $blocks[0]['info'] = t('Goodreads Bookshelf'); return $blocks;Nếu $op là list thì $blocks[0]['info'] có giá trị là "Goodreads Bookshelf" . Và giá trị này được dùng khi cài module . Sau đó :
case 'view': $url = 'http://www.goodreads.com/review/list_rss/' .'398385' .'?shelf=' .'history-of-philosophy'; $blocks['subject'] = t('On the Bookshelf'); $blocks['content'] = _goodreads_fetch_bookshelf($url); return $blocks;
Nếu $op là view thì sẽ gọi $blocks['subject'] : là tựa đề module chính. $blocks['content'] : là nội dung hiện ra . Sau đó module sẽ gọi function _goodreads_fetch_bookshelf để xử lý . Hàm watchdog(): Hàm thường có dạng như sau : watchdog('goodreads', $msg, $vars, WATCHDOG_WARNING); - Tham số thứ 1 : là tên module . - Thứ 2 và 3 : chỉ đơn giản là truyền biến var vào trong biến $msg . - Tham số thứ 4 chỉ độ quan trọng :
WATCHDOG_EMERG: The system is now in an unusable state. WATCHDOG_ALERT: Something must be done immediately. WATCHDOG_CRITICAL: The application is in a critical state. WATCHDOG_ERROR: An error occurred. WATCHDOG_WARNING: Something unexpected (and negative) happened, but didn't cause any serious problems. WATCHDOG_NOTICE: Something significant (but not bad) happened. WATCHDOG_INFO: Information can be logged. WATCHDOG_DEBUG: Debugging information can be logged.
Hook_Help trong module :
/** * Implementation of hook_help() */ function goodreads_help($path, $arg) { if ($path == 'admin/help#goodreads' || $path == 'admin/help') { $txt = 'The Goodreads module uses the !goodreads_url XML ' .'API to retrieve a list of books and display it as block ' .'content.'; $link = l('Goodreads.com', 'http://www.goodreads.com'); $replace = array( '!goodreads_url' => $link ); return '<p>'. t($txt, $replace) .'</p>'; } }
Chỉ đơn thuần là file help, hướng dẫn người dùng sử dụng module .
Không có nhận xét nào:
Đăng nhận xét