0

Gravatar 在以下页面上有其 php 实现的描述:

https://en.gravatar.com/site/implement/images/php/

我正在尝试使用此代码在 Drupal 的用户配置文件和用户图片中实现它。

我创建了一个预处理函数来启用在 user-profile.tpl.php 中打印电子邮件地址

function THEMENAME_preprocess_user_profile(&$variables) {
    $account = $variables['elements']['#account'];
    foreach (element_children($variables['elements']) as $key) {
        $variables['user_profile'][$key] = $variables['elements'][$key];
    }
    $variables['user_profile']['mail'] = $account->mail;
    field_attach_preprocess('user', $account, $variables['elements'], $variables);
}

将代码添加到user-profile.tpl.php

print render($user_profile['mail']);

此代码按预期工作 - 它在用户配置文件中显示邮件地址。现在我需要使用该地址在个人资料和用户图片中创建 gravatar。

我以某种方式尝试将 Gravatar 网站上的教程和此代码连接起来,但没有成功。这是代码(我已经尝试了至少 20 种不同的组合):

$email = "['user_profile']['mail']";
$default = "http://www.somewhere.com/homestar.jpg";
$size = 40;
function get_gravatar( $email, $s = 80, $d = 'mm', $r = 'g', $img = false, $atts = array() ) {
        $url = 'http://www.gravatar.com/avatar/';
        $url .= md5( strtolower( trim( $email ) ) );
        $url .= "?s=$s&d=$d&r=$r";
        if ( $img ) {
            $url = '<img src="' . $url . '"';
            foreach ( $atts as $key => $val )
                $url .= ' ' . $key . '="' . $val . '"';
            $url .= ' />';
        }
        return $url;
    }

据我了解,问题出在这一行:

$email = "['user_profile']['mail']";

我做错了什么,在这一行的引号之间放置的正确表达是什么?

4

1 回答 1

2

问题是关于基本的PHP语法,$variables['user_profile']['mail']用于简单访问嵌套数组(即数组中的数组。此外,如果print render($user_profile['mail']);显示用户电子邮件地址,$user_profile['mail']显然是要传递给您的自定义get_gravatar()函数的电子邮件地址。

$variables['user_profile']['gravater_url'] = get_gravatar($user_profile['mail']); 

我建议使用Gravatar 集成模块,而不是编写自己的实现。

于 2012-10-14T20:36:47.440 回答