Drupal FAQ模块用户名超链接缺失站点URL问题求助
解决Drupal FAQ模块邮件中用户链接缺失站点URL的问题
这问题我之前处理过,邮件里的相对URL确实会失效——毕竟邮件客户端没法识别你的站点根目录,必须用完整的绝对路径才行!
问题根源
你贴的这段代码:
'creator' => theme('username', array('account' => user_load($node->uid), 'plain' => TRUE))
theme('username')默认生成的是相对路径(比如/users/joeblock),这种路径在站点内访问没问题,但放到邮件里就找不到对应的站点了,自然无法正常跳转。
两种修复方案
方案1:用l()函数生成绝对链接(推荐)
直接用Drupal的l()函数构建带完整站点URL的用户链接,它支持absolute参数来生成绝对路径:
$account = user_load($node->uid); 'creator' => l($account->name, 'user/' . $account->uid, array('absolute' => TRUE))
这样生成的链接会自动带上你的站点基础URL(比如https://example.com/users/joeblock),邮件客户端就能正常识别跳转了。
方案2:手动构建绝对链接
如果更倾向于手动控制链接的HTML结构,可以先通过url()函数获取用户页面的绝对URL,再拼接成完整的链接:
$account = user_load($node->uid); $user_absolute_url = url('user/' . $account->uid, array('absolute' => TRUE)); 'creator' => '<a href="' . $user_absolute_url . '" title="' . t('View user profile') . '">' . check_plain($account->name) . '</a>'
这种方式更灵活,你可以自定义链接的title或其他属性。
注意事项
如果你的站点是Drupal 8及以上版本,user_load()需要替换为\Drupal\user\Entity\User::load($node->uid),不过从你提供的模块代码来看,应该是Drupal 7的版本,直接用user_load()就没问题。
内容的提问来源于stack exchange,提问作者Markus
相关产品推荐
相关产品推荐

