我有一个网站,其中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
这样做的最佳做法是什么?
答案 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.
}
}
它就像一个魅力!