如何在drupal中使用通配符

时间:2010-07-07 07:20:49

标签: php drupal drupal-6 wildcard

我有一个网站,其中drupal管理内容,但另一个应用程序处理电子商务(我的客户不喜欢改变他自己的电子商务)

我不喜欢让电子商务看起来与其他网站不同,所以我做了一个带有PHP代码的drupal页面节点,只包含外部应用程序并初始化它。

效果很好,但问题是电子商务产生的另一个环节:

http://example.com/shop #The Page node i've created, this work
http://example.com/shop/catalog/fruit/ #here comes the trouble!

外部应用程序自己处理网址,所以我需要告诉drupal将所有以shop开头的网址重定向到他的shop网页节点......类似

http://example.com/shop/* => load http://example.com/shop

这样做的最佳做法是什么?

2 个答案:

答案 0 :(得分:1)

如果您创建模块而不是节点,这将非常简单。

使用hook_menu()匹配网址字符串

function example_menu() {
  $menu = array()
  $menu['shop'] = array(
  'page callback' = 'example_callback';
  )
}

function example_callback() {
  // use arg() to get arguments.
  return shop_php();
}

使用钩子菜单创建回调允许您调用自己的代码,回调返回的值将显示在页面中。当drupal看到与商店*匹配的URL时,它将调用函数example_callback。在此功能中,您可以将当前的代码放在页面节点中。并返回您希望在页面中显示的内容。

答案 1 :(得分:1)

googlin环绕后,我发现Drupal custom_url_rewrite_inbound完全符合我的需要。

我在/sites/default/settings.php中插入了这个函数:

function custom_url_rewrite_inbound(&$result, $path, $path_language) {
  if(preg_match("/^shop(\/)/", $path, $matches)) {
    $result = 'node/XX'; //XX is the ID of my Page Node with the ecommerce code.
  }
}

它就像一个魅力!