У меня есть чат в стиле Facebook на моем сайте drupal, однако в сценарии отсутствует интеграция пользовательских изображений. Мне удалось получить пользовательские изображения, но если пользователь не установил изображение и использует изображение по умолчанию, я получаю сломанное изображение и 404 not found
в логах. Я пытался получить gravatar
для пользователей без набора изображений, но не может заставить его работать.
/**
* This function returns the URL of the avatar of the specified user ID.
*
* @param userid the user ID of the user
* @param image if the image includes more than just a user ID, this param is passed
* in from the avatar row in the buddylist and get user details functions.
* @return the link of the user ID's profile
*/
function get_avatar($image, $user_id, $account) {
return "http://mypage.com/files/pictures/picture-" . ($user_id) . ".jpg";
if (empty($account->picture)) {
return "http://www.gravatar.com/avfatar/" . md5($image) . "?d=identicon";
}
}
Ваша проблема заключается в том, что вы немедленно возвращаете свое изображение, независимо от того, находится ли оно там:
function get_avatar($image, $user_id, $account)
{
//THE NEXT LINE RETURNS FROM THE FUNCTION REGARDLESS
return "http://mypage.com/files/pictures/picture-" . ($user_id) . ".jpg";
//THIS CODE NEVER RUNS
if (empty($account->picture)) {
return "http://www.gravatar.com/avfatar/" . md5($image) . "?d=identicon";
}
}
Что вам нужно сделать, это следующее:
function get_avatar($image, $user_id, $account)
{
$imgurl ="http://mypage.com/files/pictures/picture-" . ($user_id) . ".jpg";
if (!is_imgurl_good($imgurl)) {
$imgurl = "http://www.gravatar.com/avfatar/" . md5($image) . "?d=identicon";
}
return $imgurl;
}
В приведенном выше, вам придется написать функцию, is_imgurl_good
который возвращает boolean
указывает, хорошо ли изображение. true
если это и false
если не. Есть много способов написать эту функцию, которая выходит за рамки этого вопроса, но вы можете проверить подход с помощью этого:
function is_imgurl_good($imgurl) {
return false;//Check that if this returns false the previous function works
//return true; //Comment out the first line and uncomment this one to show the reverse case.
//put your actual code here to decide whether $imgurl is a valid image.
}
Других решений пока нет …