hook_menu 的实现(3)

description: 
本文讲述了如何在菜单的路径中传递参数。

首先我们来看下之前的代码:
<pre>
function mymenu_menu() {
    global $user;
    $items['mymenu'] = array(
    'title' => t('My Menu'),
    'title callback' => 'mymenu_title',
    'title arguments' => array('Custon Menu'),
    'page callback' => 'mymenu_page',
    'page arguments' => array($user),
    'access callback' => 'user_access',
    'access arguments' => array('access mymenu')
    );
   
    return $items;
}
</pre>
之前我提过在$items数组中key值代表菜单的路径,比如我们这里的'mymenu'就是我们这个菜单对应页面的路径。我们可以在key中实现更复杂的结构
<pre>
function mymenu_menu() {
    global $user;
    $items['mymenu'] = array(
      'title' => t('My Menu'),
      'title callback' => 'mymenu_title',
      'title arguments' => array('Custon Menu'),
      'page callback' => 'mymenu_page',
      'page arguments' => array($user),
      'access callback' => 'user_access',
      'access arguments' => array('access mymenu')
    );
   
    $items['mymenu/greeting'] = array(
      'title' => t('Greeting'),
      'page callback' => 'greeting_page',
      'access arguments' => array('access content')
    );
   
    return $items;
}
function greeting_page() {
    return t('Hello');
}
</pre>
这里我们就在mymenu下面添加了一个子菜单叫greeting。清空一下缓存查看一下我们修改的效果。

在菜单的路径里面还可以添加一些参数,我们来看下面的例子:
function mymenu_menu() {
    global $user;
    $items['mymenu'] = array(
      'title' => t('My Menu'),
      'title callback' => 'mymenu_title',
      'title arguments' => array('Custon Menu'),
      'page callback' => 'mymenu_page',
      'page arguments' => array($user),
      'access callback' => 'user_access',
      'access arguments' => array('access mymenu')
    );
   
    $items['mymenu/%/greeting'] = array(
      'title' => t('Greeting'),
      'page callback' => 'greeting_page',
      'page arguments' => array(1),
      'access arguments' => array('access content')
    );
   
    return $items;
}
  function greeting_page($name) {
    return t('Hello, ').$name;
}
先看一下显示的结果。当我们访问 http://localhost/drupal/mymenu/john/greeting这个URL时,

这里的john已经作为参数传递到我们的函数里面了。我们来详细解释下如何使用在URL中的参数。首先我们看一下我们设置的菜单的路径'mymenu/%/greeting',把想要作为参数的路径用%来代替。其实Drupal当中URL路径都会作为参数传递到函数里面,比如 http://localhost/drupal/mymenu/john/greeting 这里面localhost/drupal是网站的名称,它后面的路径都是传递到函数里面的参数。这些参数是通过一个数组传递过来的,这里mymenu的索引是0,john的索引是1,以此类推。然后我们在'page arguments'中设置参数为array(1),意思就是把mymenu和greeting的路径作为参数传递到函数当中。在函数当中我们用变量$name来表示这个参数。

评论

顶!

公司真厉害,让你们搞这个.

嘿嘿, John师傅现在也是牛人一个,每天上你的BLOG看你教程,然后自己再写点教程。
你不是去大兴了?