ทดลองแปลงโมดูล On This Date ของ Drupal-5 Modules Tutorial
โมดูลในรุ่น 5 ควรเขียนในไดเรกทอรี่ ./sites/all/modules/
ดังนั้นต้องสร้างไดเรกทอรี่ให้โมดูลเราก่อน โดยใช้ชื่อ onthisdate เหมือนเดิม
$ cd /var/www/drupal
$ mkdir -p sites/all/modules/onthisdate
$ cd sites/all/modules/onthisdate
สำหรับรุ่น 5 ต้องมีไฟล์ info
$ vi onthisdate.info
; $Id$ name = On this date description = "A block module that lists links to content such as blog entries or forum discussions that were created one week ago. (wd's: Modify to recent 3 days post)"
คราวนี้ก็สร้างไฟล์โมดูลจริง ๆ ได้แล้ว
$ vi onthisdate.module
<?php /** * @file: onthisdate.module.5.txt Drupal tutorial on how to write modules * @author: Kitt Hodsden (http://kitt.hodsden.org/) * @license: GPL:v2, CC:by-nc-sa, contact for commercial uses */ /** * Display help and module information * @param section which section of the site we're displaying help * @return help text for section */ function onthisdate_help($section='') { $output = ''; switch ($section) { case "admin/help#onthisdate": $output = '<p>'. t("Displays links to nodes created on this date"). '</p>'; break; } return $output; } // function onthisdate_help /** * menu hook * @return array of menu items */ function onthisdate_menu() { $items = array(); //this was created earlier in tutorial 7. $items[] = array( 'path' => 'admin/settings/onthisdate', 'title' => t('On this date module settings'), 'callback' => 'drupal_get_form', 'callback arguments' => 'onthisdate_admin', 'access' => user_access('access administration pages'), 'type' => MENU_NORMAL_ITEM, ); //this is added for this current tutorial. $items[] = array( 'path' => 'onthisdate', 'title' => t('on this date'), 'callback' => 'onthisdate_all', 'access' => user_access('access content'), 'type' => MENU_CALLBACK ); return $items; } function onthisdate_admin() { $form['onthisdate_maxdisp'] = array( '#type' => 'textfield', '#title' => t('Maximum number of links'), '#default_value' => variable_get('onthisdate_maxdisp', 3), '#size' => 2, '#maxlength' => 2, '#description' => t("The maximum number of links to display in the block.") ); return system_settings_form($form); } /** * Valid permissions for this module * @return An array of valid permissions for the onthisdate module */ function onthisdate_perm() { return array('access onthisdate', 'administer onthisdate'); } // function onthisdate_perm() /** * Generate HTML for the onthisdate block * @param op the operation from the URL * @param delta offset * @returns block HTML */ function onthisdate_block($op='list', $delta=0) { // listing of blocks, such as on the admin/block page if ($op == "list") { $block[0]["info"] = t("On This Date"); return $block; } else if ($op == 'view') { // our block content // content variable that will be returned for display $block_content = ''; // Get today's date $today = getdate(); // calculate midnight one week ago //$start_time = mktime(0, 0, 0,$today['mon'], // ($today['mday'] - 7), $today['year']); //wd's: MODIFY TO LAST 3 DAYS $start_time = mktime(0, 0, 0,$today['mon'], ($today['mday'] - 3) , $today['year']); // we want items that occur only on the day in question, so //calculate 1 day //$end_time = $start_time + 86400; // 60 * 60 * 24 = 86400 seconds in a day //wd's EXPAND TO 3 DAYS $end_time = $start_time + 259200; $limitnum = variable_get("onthisdate_maxdisp", 3); $query = "SELECT nid, title, created FROM " . "{node} WHERE created >= %d " . "AND created <= %d ORDER BY created DESC"; // get the links $queryResult = db_query_range($query, $start_time, $end_time, 0, $limitnum); while ($links = db_fetch_object($queryResult)) { //wd's: MODIFY TO LIST //$block_content .= l($links->title, 'node/'.$links->nid) . '<br />'; $block_content .= '<li>'.l($links->title, 'node/'.$links->nid) . '</li>'; } // check to see if there was any content before setting up the block if ($block_content == '') { // no content from a week ago, return nothing. return; } else { //wd's: ADD <ul> $block_content = '<ul>'.$block_content.'</ul>'; } // add a more link to our page that displays all the links $block_content .= "<div class=\"more-link\">". l( t("more"), "onthisdate", array( "title" => t("More events on this day.")))."</div>"; // set up the block //$block['subject'] = 'On This Date'; //wd's EXPAND TO 3 DAYS $block['subject'] = 'These 3 Days'; $block['content'] = $block_content; return $block; } } // end onthisdate_block /** * Settings for the onthisdate module * @return form contents for this module */ function onthisdate_settings() { // only administrators can access this function if (!user_access('access administration pages')) { return message_access(); } // 4.7 forms API $form['onthisdate_maxdisp'] = array('#type' => 'textfield', '#title' => t('Maximum number of links'), '#default_value' => variable_get('onthisdate_maxdisp', 3), '#description' => t("The maximum number of links to display in the block."), '#maxlength' => '2', '#size' => '2'); return $form; } /** * Render a page listing links to all the content from a week ago */ function onthisdate_all() { // content variable that will be returned for display $page_content = ''; // Get today's date $today = getdate(); // calculate midnight one week ago //$start_time = mktime(0, 0, 0, $today['mon'], ($today['mday'] - 7), $today['year']); //wd's: CHANGE TO LAST 3 DAYS $start_time = mktime(0, 0, 0, $today['mon'], ($today['mday'] - 3), $today['year']); // we want items that occur only on the day in question, // so calculate 1 day //$end_time = $start_time + 86400; // 60 * 60 * 24 = 86400 seconds in a day //wd's EXPAND TO 3 DAYS $end_time = $start_time + 259200; $query = "SELECT nid, title, created FROM " . "{node} WHERE created >= '" . $start_time . "' AND created <= '". $end_time . " ORDER BY created DESC'"; // get the links (no range limit here) $queryResult = db_query($query); while ($links = db_fetch_object($queryResult)) { //$page_content .= l($links->title, 'node/'.$links->nid).'<br />'; //wd's: ADD LIST $page_content .= '<li>'.l($links->title, 'node/'.$links->nid).'</li>'; } // check to see if there was any content before // setting up the block if ($page_content == '') { // no content from a week ago, let the user know $page_content = "No events occurred on this site on this date in history."; } else { //wd's: ADD <ul> $page_content = '<ul>'.$page_content.'</ul>'; } print theme("page", $page_content); } ?>
เสร็จแล้ว
ต่อไปก็ทำตามขั้นตอนคือ
admin/build/module -> enable onthisdate
admin/user/access -> เปิดให้ทำงานตาม roles
admin/build/block -> enable onthisdate