我想重写以下网址:
- 节点/添加
- 节点/编辑等
类似于 - 内容/添加 - 内容/编辑
我还使用预填充模型,并且希望能够重写此 URL:
- node/add/single-gallery-image?edit[field_gallery_node_reference][0][nid]=48
对于这样的事情:
- 内容/添加/图像?n=48
这可能吗?如果是这样,我是否需要一些 Drupal 模块,或者我是否必须使用 htaccess 文件?
我想重写以下网址:
类似于 - 内容/添加 - 内容/编辑
我还使用预填充模型,并且希望能够重写此 URL:
对于这样的事情:
这可能吗?如果是这样,我是否需要一些 Drupal 模块,或者我是否必须使用 htaccess 文件?
使用 pathauto 模块,您可以为您的 url 创建别名。您可以设置很多规则,并且应该能够走得很远。我不确定它与预填充模型的集成程度如何。但其余的应该很容易。
这里有几个选项。
1)您可以使用 pathauto 模块重命名路径。然后这些路径在服务器级别变得完全可用,但旧的 node/add 和 node/%/edit 路径仍然存在。
2)您可以制作一个通过 hook_menu 实现路径的自定义模块,从 node.module 的 hook_menu 实现中复制适当的代码。这也会在站点上留下旧的 node/add 和 node/%/edit 路径,但是您可以使用 hook_menu_alter 从菜单数组中取消设置适当的路径。
3)您可以按照 Olav 的建议 使用custom_url_rewrite_inbound和custom_url_rewrite_outbound函数。
老实说,第一个选项通常更好,因为它会更快并且不会打开意外的错误。方法 2 肯定会改变你想要的,但也会涉及更改 Drupal 所依赖的一些相当基本的路径,这可能意味着当你发现节点模块的角落中没有涵盖的时候,这将意味着相当多的调试会话你的改变。方法 3 我不太熟悉,但看起来它允许您像 1 中那样重写路径,但使它们更真实,但可能存在性能问题,而且还需要进行大量调试。
您可以使用hook_menu创建一个实现这些回调的自定义模块,但这只会为这些操作创建额外的 url,而不是删除旧的。
查看函数custom_url_rewrite_inbound和custom_url_rewrite_outbound。这些不是模块,而是放置在 settings.php 中的函数,它们在低级别与 drupal 的 url 映射接口。