Drupal面板页面路径自动

Drupal面板页面路径自动,drupal,drupal-7,drupal-panels,pathauto,Drupal,Drupal 7,Drupal Panels,Pathauto,我有一个面板页面,设置了路径node/%node/foo,当我访问node/6/foo等链接时,所有页面都可以正常工作。但是,当我访问nodealias/foo时,它根本不起作用。是否可以通过这种方式使面板与pathauto一起工作 我想我可能必须实现钩子并自己更改url 我还在这里的panels模块中发布了一个支持请求:nodealias是节点的完整别名,nid=6。panels模块通过hook_menu()将第三个参数(foo)添加到确切的别名(node/%nid/%anythingelse

我有一个面板页面,设置了路径
node/%node/foo
,当我访问
node/6/foo
等链接时,所有页面都可以正常工作。但是,当我访问
nodealias/foo
时,它根本不起作用。是否可以通过这种方式使面板与pathauto一起工作

我想我可能必须实现钩子并自己更改url


我还在这里的panels模块中发布了一个支持请求:

nodealias是节点的完整别名,nid=6。panels模块通过hook_menu()将第三个参数(foo)添加到确切的别名(node/%nid/%anythingelse)中,并且它不应用于别名URL,因此您不能使用nodealias/foo URL访问您的面板,因为它没有被panels模块“钩住”。
我认为手动更改url是个好主意。

因为Alexey answers panels不关心别名,它只看到节点/%nid 以下是一个对D7仍然有效的很好的解释: 总结并更新D7的最新信息: 导出已创建面板的变体,并将其导入覆盖Drupal中默认节点显示的面板。 将标准添加到变体中,使面板/变体仅用于要使用此变体显示的内容类型。 瞧:)(阅读链接上的讨论,否则摘要将难以理解)


希望这有帮助-我自己花了一些时间在谷歌上搜索并试图理解这一点,我也被视图确实关心别名的事实弄糊涂了…

我使用以下代码解决了这个问题,您需要更改模式以匹配url别名的模式,并更改函数名以匹配模块名

function brooklands_url_inbound_alter(&$path, $original_path, $path_language) {
    $pattern = '#^works\/[A-Za-z0-9]+(-[A-Za-z0-9]+)*\/images(\/\d+)?$#';
    if(preg_match($pattern, $original_path)) {
        $snip = substr($original_path, 0, strrpos($original_path, '/images'));
        $system_path = drupal_lookup_path('source', $snip);
        if($system_path) {
            $tail = substr($original_path, strrpos($original_path, '/images'));
            $path = $system_path . $tail;
        }
    }
}
你可以使用这个模块


它会自动使别名与子路径一起工作,例如:
nodealias/foo

同样,在意识到由于视图的原因,我对别名做出了相同的假设之前,我已经花了比我承认的更多的时间来解决这个问题。