我正在使用drupal FAQ模块,该模块向管理员including the authors username as hyperlink发送电子邮件,通过以下方式定义:
'creator' => theme('username', array('account' => user_load($node->uid), 'plain' => TRUE)),
很遗憾,它只链接到 / users / joeblock ,因此错过了网址网址https://example.com ,这意味着它无法在电子邮件中工作。< / p>
<a href="/users/joeblock" title="View user profile." class="username">Joe Block</a>
我已经尝试过模块 pathologic ,希望它添加网站网址,但没有帮助(perhaps because the rendered ahref includes a / infront of it)。
是否可以修改此实例的超链接以插入siteurl?
更新
将$variables['link_options']['absolute'] = true;
添加到 includes / theme.inc 中。
function theme_username($variables) {
if (isset($variables['link_path'])) {
// We have a link path, so we should generate a link using l().
// Additional classes may be added as array elements like
// $variables['link_options']['attributes']['class'][] = 'myclass';
$variables['link_options']['absolute'] = true;
$output = l($variables['name'] . $variables['extra'], $variables['link_path'], $variables['link_options']);
}
答案 0 :(得分:1)
是的,这是可能的! faq模块使用主题用户名。此主题在includes / theme.inc函数theme_username
中定义在自定义主题中,您可以实现template_process_username挂钩并更改$ variables数组。 主题用户名使用url函数来创建url。此函数接受绝对属性以构建绝对URL。
要创建此功能,您可以创建自定义主题https://www.drupal.org/docs/7/theming/howto/create-a-new-custom-theme-with-css-alone并将yourthemename_process_username函数放在自定义主题的template.php文件中。 否则,您可以在自定义模块中添加该功能。
让我们用自定义模块(带有markus名称)做一个例子,因为创建自定义模块比自定义主题更常见。 创建site / all / modules / custom / markus目录。 在此目录中,使用以下内容创建markus.module文件:
<?php
function markus_node_presave($node){
if( $node->type == 'faq' ){
drupal_static('markus_faq_node_save', true);
}
}
function markus_process_username( &$variables ){
if( drupal_static('markus_faq_node_save', false) ){
// alter the link_options only when you came from the ask module otherwise, without
// this if, all the username links in drupal will be absolute url.
// Actually this is not a problem but it may be overkilling
$variables['link_options']['absolute'] = true;
}
}
使用以下内容在markus目录中创建markus.info文件:
name = markus
description = "my custom module"
core = 7.x
package = "markus"
现在从管理菜单中启用您的主题。
最好在自定义模块中实现markus_process_username函数,而不是编辑includes / theme.inc文件,因为通过这种方式,您可以更轻松地更新drupal。不应该编辑drupal核心:)