21 使用to_arg()函数为通配符构建路径
作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
还记不记得前面我们曾经说过,对于包含通配符的Drupal路径,Drupal无法为其创建一个有效的链接,比如node/%(毕竟,Drupal怎么会知道如何替换%呢)?不过这一点并非完全正确。我们可以定义一个帮助函数,来为通配符参数提供一个默认值,这样,在Drupal构建链接时,就有路径可用了。向我们的模块的module文件中追加以下函数:
作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
还记不记得前面我们曾经说过,对于包含通配符的Drupal路径,Drupal无法为其创建一个有效的链接,比如node/%(毕竟,Drupal怎么会知道如何替换%呢)?不过这一点并非完全正确。我们可以定义一个帮助函数,来为通配符参数提供一个默认值,这样,在Drupal构建链接时,就有路径可用了。向我们的模块的module文件中追加以下函数:
作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
有两个特殊的加载参数。%map令牌将当前Drupal路径作为数组进行传递。在前面的例子中,如果%map作为一个加载参数传递过来的话,那么其值就
作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
如果需要向加载函数传递额外的参数,那么可以使用load arguments键。下面是来自节点模块的例子:一个用来查看节点修订本的菜单项。在这里需要向加载函数,也就是node_load(),传递节点ID和修订本的ID。
作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
向我们的菜单钩子中添加一个新的菜单项:
作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
我们新增一个菜单项:
function menu_wildcard_menu() {
作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
菜单路径中的通配符,不影响将URL中的额外部分作为参数传递给页面回调,这是因为通配符只匹配到下一个/字符。继续使用我们的wildcard/%路径作为例子,对于URL wildcard/123/b/c/d,通配符所匹配的字符串就是123,而对于路径中的其余部分(b/c/d),它们将分别作为参数传递给页面回调。
作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
%字符在Drupal菜单项中是一个特殊的字符。它意味着“从这到下一个/字符之间的字符串”。上面是一个使用了通配符的菜单项。这个菜单项适用的Drupal路径可以有wildcard /a, wildcard/a/b, wildcard/88。但是它对路径wildcard不起作用;对于后者,因为它只包含了一个部分,而wildcard /%只匹配至少具有两部分的字符串,所以你需要为其单独创建一个菜单项。注意,尽管%通常是用来指定一个数字的(比如,user/%/edit用于user/1/edit),但是它能匹配该位置上的任何文本。
作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
到目前为止,我们在菜单项中所用的都是普通的Drupal路径名字,比如menu_abc 、my、my/orders。但是Drupal还经常使用这样的路径,比如user/1或node/1/edit,在这些路径中,有一部分是动态的。现在,让我们来看看动态路径是如何工作的。