drupal用户名超链接缺少网站网址 - 来自user_load的ahref($ node-> uid)

时间:2018-03-22 12:48:54

标签: php drupal hyperlink drupal-7 username

我正在使用drupal FAQ模块,该模块向管理员including the authors username as hyperlink发送电子邮件,通过以下方式定义:

'creator' => theme('username', array('account' => user_load($node->uid), 'plain' => TRUE)),

http://cgit.drupalcode.org/faq_ask/tree/faq_ask.module?id=9f4fbb7859c8fc24977f5d67cd589685236e442d#n480

很遗憾,它只链接到 / 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']);
      }

1 个答案:

答案 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核心:)