Drupal7专业开发指南 第三版,菜单系统的代码,测试通过
menufun_greeting.inc
<?php function menufun_greeting ($first_name = '', $last_name = '', $from_first_name = '', $from_last_name = '') { return t( 'Hello @first_name @last_name from @from_first_name @from_last_name', array( '@first_name' => $first_name, '@last_name' => $last_name, '@from_first_name' => $from_first_name, '@from_last_name' => $from_last_name )); } function menufun_farewell () { return t('Goodbye'); }
menufun.info
name = Menu Fun description = Learning about the menu system. package = Pro Drupal Development core = 7.x files[] = menufun.module
<?php /** * @file * Use this module to learn about Drupal's menu system. * 使用这个模块来学习菜单系统 */ /** * Implementation of hook_menu() * hook menu */ // function menufun_menu () // { // $items['menufun'] = array( // 'title' => 'Greeting', // 一个必须字段,是未翻译的title // 'page callback' => 'menufun_hello', // 当用户浏览此路径时调用的函数,用来显示web页面 // 'access callback' => TRUE, // // 一个函数,返回一个布尔值,判定用户是否有访问该菜单项的权限;默认为user_access(),除非从父菜单项继承一个值 // 'type' => MENU_CALLBACK // 一个标志,描述菜单项的特性,MENU_CALLBACK // 回调简单地注册一个路径,URL访问时恰当的函数将被触发 // ); // return $items; // } // function menufun_menu () // { // $items['menufun'] = array( // 'title' => 'Greeting', // 'page callback' => 'menufun_hello', // 'page arguments' => array('Jane', 'Doe'), // 要传递给页面回调函数的参数的数组 // 'access callback' => TRUE, // 'type' => MENU_CALLBACK // ); // return $items; // } // function menufun_menu () // { // $items['menufun'] = array( // 'title' => 'Menu Fun', // 'page callback' => 'menufun_greeting', // 'file' => 'menufun_greeting.inc', // 'page arguments' => array( // 'Jane', // 'Doe' // ), // 'access callback' => TRUE, // 'type' => MENU_CALLBACK // ); // return $items; // } // function menufun_menu () // { // $items['menufun'] = array( // 'title' => 'Greeting', // 'page callback' => 'menufun_hello', // 'page arguments' => array( // 'Jane', // 'Doe' // ), // 'access callback' => TRUE, // 'weight' => - 1 // ); // return $items; // } // 多个菜单 // function menufun_menu () // { // $items['menufun'] = array( // 'title' => 'Menu Fun', // 'page callback' => 'menufun_greeting', // 'file' => 'menufun_greeting.inc', // 'page arguments' => array( // 'Jane', // 'Doe' // ), // 'access callback' => TRUE, // 'type' => MENU_NORMAL_ITEM, // 'weight' => '-1' // ); // $items['menufun/farewell'] = array( // 作为Menu Fun的子菜单 // 'title' => 'Farewell', // 'page callback' => 'menufun_farewell', // 'file' => 'menufun_greeting.inc', // 'access callback' => TRUE, // 'type' => MENU_NORMAL_ITEM // ); // return $items; // } // 带有权限检验 /** * Implementation of hook_menu(). */ // function menufun_menu () // { // $items['menufun'] = array( // 'title' => 'Menu Fun', // 'page callback' => 'menufun_greeting', // 'file' => 'menufun_greeting.inc', // 'page arguments' => array( // 'Jane', // 'Doe' // ), // 'access callback' => 'user_access', // user_access()函数是默认的访问回调,如果你不定义访问回调函数,你的访问参数将有菜单系统传递给user_access()函数。 // 'access arguments' => array( // 传递给访问回调函数的参数数组 // 'receive greeting' // 定义一个叫做receive greeting的权限 // ), // 'type' => MENU_NORMAL_ITEM, // 'weight' => '-1' // ); // $items['menufun/farewell'] = array( // 'title' => 'Farewell', // 'page callback' => 'menufun_farewell', // 'file' => 'menufun_greeting.inc', // 'access callback' => 'user_access', // 'access arguments' => array( // 'receive greeting' // ), // 'type' => MENU_NORMAL_ITEM // ); // return $items; // } // drupal 本地化测试 function menufun_menu () { $items['menufun'] = array( 'title' => 'Greeting', 'title callback' => 'menufun_title', 'description' => 'A salutation.', 'page callback' => 'menufun_hello', 'access callback' => TRUE ); return $items; } /** * Page callback. */ function menufun_hello () { return t('Hello!'); } /** * Title callback. * 标题回调 */ // function menufun_title () // { // $now = format_date(time()); // return t('It is now @time', array( // '@time' => $now // )); // } function menufun_title () { // 使得页面标题和菜单标题不同 drupal_set_title(t('The page title')); $now = format_date(time()); return t('It is now @time', array( '@time' => $now )); } // /** // * Page callback // * 简单的回调函数,仅仅在页面上显示标题和欢迎 // */ // function menufun_hello () // { // return t('Hello!'); // } // function menufun_hello ($first_name = '', $last_name = '') // { // return t('Hello @first_name @last_name', //@first_name是一个占位符,t函数有t($string, $args = array(), $langcode = NULL)的类型 // array( // '@first_name' => $first_name, // '@last_name' => $last_name // )); // } // function menufun_hello ($first_name = '', $last_name = '') // { // return t( // 'Hello @first_name @last_name from @from_first_name @from_last_name', // array( // '@first_name' => $first_name, // '@last_name' => $last_name // )); // } /** * Implementation of hook_permission() * 权限控制,往drupal的模块——权限页面添加一个权限选项 */ function menufun_permission () { return array( 'receive greeting' => array( 'title' => t('Receive a greeting'), 'description' => t('Allow users receive a greeting message') ) ); } /** * Implementation of hook_menu_alter(). * * @param array $items * Menu items keyed bu path. * 改变登出动作 */ function menufun_menu_alter(&$items) { // Replace the page callback to 'user_logout' with a call to // our own page callback. $items['logout']['page callback'] = 'menufun_user_logout'; $items['logout']['access callback'] = 'user_is_logged_in'; // Drupal no longer has to load the user.pages.inc file // since it will be calling our menufun_user_logout(), which // is in our module -- and that's already in scope. unset($items['logout']['file']); } /** * Menu callback; logs the current user out, and redirects to drupal.org * This is a modified version of user_logout(). */ function menufun_user_logout () { global $user; watchdog('menufun', 'Session closed for %name.', array( '%name' => $user->name )); // Destroy the current session. session_destroy(); // Run the 'logout' operation of the user hook so modules can respond // to the logout if they want to. module_invoke_all('user', 'logout', NULL, $user); // Load the anonymous user so the global $user object will be correct // on any hook_exit() implementation. $user = drupal_anonymous_user(); drupal_goto('http://drupal.org/'); }
一些结果: