如果用户访问:用户帐户页面上的Drupal目标参数不持久?
user/register?destination=node/add/listing
然后他们点击“登录”或“忘记密码”选项卡,它不会保持在地址栏的目标参数。即点击“登录”,并登录后,用户将不会在实际上结束了:
node/add/listing
我想编辑核心用户模块,但甚至无法找到要修改正确的地方,我知道这是一个非常糟糕的解决方案。
有谁知道我能得到这个权利?
如果用户访问:用户帐户页面上的Drupal目标参数不持久?
user/register?destination=node/add/listing
然后他们点击“登录”或“忘记密码”选项卡,它不会保持在地址栏的目标参数。即点击“登录”,并登录后,用户将不会在实际上结束了:
node/add/listing
我想编辑核心用户模块,但甚至无法找到要修改正确的地方,我知道这是一个非常糟糕的解决方案。
有谁知道我能得到这个权利?
你所谈论的链接是静态链接就像你的导航。它们被缓存等等,所以你不能轻易改变它。这种行为大部分时间都在进行。您通常不想将querystrings转移到其他链接。
要做到这一点,我认为最好的办法是不要直接做在Drupal,而是用JavaScript做到这一点。您可以设置一个js变量或者检查document.URL
。
你也许可以Drupal的范围内做到这一点,但考虑到具体的情况下,它不会是值得的。
我碰到这个来寻找同样的问题时,(我正在试图找到一个核心问题,但未能)。无论如何,我最终落实到位的解决方案比应该的要多,但是完成这项工作。
首先,下载并安装url_alter module。然后,在自定义模块中,实现hook_url_outbound_alter()。以下是我使用的代码,但许多变体都是可能的。
/**
* Implementation of hook_url_outbound_alter().
*
* If the url_alter module is enabled, and email verification is disabled,
* this will pass the destination parameter to the registration and login tabs.
*/
function os_custom_url_outbound_alter(&$path, &$options, $original) {
if (user_is_anonymous() && in_array($original, array('user', 'user/register', 'user/login')) && empty($options['query']) && !variable_get('user_email_verification', TRUE)) {
$options['query'] = drupal_get_destination();
}
}
我想你可以通过主题菜单链接来做到这一点。我在这里为Drupal 6写了http://tappetyclick.com/blog/2013/04/11/maintain-destination-drupal-user-account-menu#.UWbt8hcmdIE的解决方案