You are here

10 页面回调参数

admin 的头像
Submitted by admin on 星期二, 2015-06-02 01:25

作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com

有时候,我们可能希望能够向回调函数提供更多的信息。首先,路径中的其它部分能够自动的作为参数传递过来。让我们修改一下我们的回调函数,增加两个参数:

 

/**

 * 菜单项menu_abc/sub的回调函数.

 */

function menu_abc_sub_callback_page($arg1 = '', $arg2 = ''){

  $render_array = array();

  $render_array['#markup'] = t('菜单ABC子页面内容 @arg1 @arg2', array('@arg1' =>

    $arg1, '@arg2' => $arg2));   

  return $render_array;

}

现在,如果我们访问http://localhost/thinkindrupal/menu_abc/sub/A/B/C,我们将得到如图3-11所示的输出。

 

 

图片1.png

 3-11.路径的其余部分传递给了回调函数。

 

我们在这里需要注意,URL中的其余部分是如何作为参数传递给我们的回调函数的,注意A作为第一参数,B作为第二个参数传递了过来,而C则没有传递过来。

 

还可以在菜单钩子中定义页面回调的参数,只需要使用'page arguments'(页面参数)键即可。定义页面参数有时非常有用,这样我们就可以定义一个回调函数,供不同的菜单项调用,而菜单项则可以使用页面参数来传递上下文。让我们在我们的菜单项中定义一下页面参数:

 

  $items['menu_abc/sub'] = array(

    'title' => '菜单ABC子项',

    'description' => '菜单ABC的子项.',

    'page callback' => 'menu_abc_sub_callback_page',

'page arguments' => array('B', 'C'),

'file' => 'menu_abc.pages.inc',

    'access callback' => TRUE,

'weight' => 10,

'menu_name' => 'main-menu',

  );

我们在菜单钩子中定义的回调参数,将会首先传递给回调函数(也就是说,在传递给回调函数的参数列表中,它放在最前面),其次才是从路径中获取的参数。来自URL的参数仍然可用。让我们做一下测试,仍然访问http://localhost/thinkindrupal/menu_abc/sub/A/B/C,我们将看到如图3-12所示的结果(如果你没有得到这一结果,那你清空一下缓存)。

图片2.png 

 3-12.向回调函数中传递和显示参数


    此时,我们看到起作用的是菜单钩子中定义的回调参数,通过URL传递过来的参数则没有起任何作用。原因是我们这里只有两个参数,如果再添加两个参数的话:

 

/**

 * 菜单项menu_abc/sub的回调函数.

 */

function menu_abc_sub_callback_page($arg1 = '', $arg2 = '', $arg3 = '', $arg4 = ''){

  $render_array = array();

  $render_array['#markup'] = t('菜单ABC子页面内容 @arg1 @arg2 @arg3 @arg4',  array('@arg1' => $arg1, '@arg2' => $arg2, '@arg3' => $arg3, '@arg4' => $arg4));

  return $render_array;

}

    此时,我们再次访问页面menu_abc/sub/A/B/C,注意页面内容的变化:

图片3.png 

      3-13.页面参数和URL参数

 

 

在页面回调参数的数组中,键被忽略了,只有值才有意义,所以你不能使用键来对应回调函数中的参数;在这里,是按照顺序走。回调参数通常是变量,并常用在动态菜单项中。


Drupal版本: