ユーザーのプロファイルへのリンクなしでユーザーの写真を印刷しようとしています。これはtheme('user_picture', array('account' =>$user_item))
がレンダリングするものです。 image_style_url('thumbnail', $user->picture->uri)
を使用すると、Gravatarフックが呼び出されません。
これまでのところ、私がこれを行う唯一の方法は次のとおりです。
if (function_exists('_gravatar_get_account_user_picture')) {
$picture = _gravatar_get_account_user_picture($user);
} else {
$picture = $user->picture->uri;
}
if (file_valid_uri($picture)) {
$picture = image_style_url('thumbnail', $picture);
}
しかし、特にモジュールを開発していて、Gravatarモジュールを明示的に呼び出す必要がないため、これはあまりエレガントではありません。
助言がありますか?
ありがとう!
theme('user_picture')
を呼び出すとユーザー画像がリンクとして返されるのは、gravatar_preprocess_user_picture()
関数にハードコード化されているためです(_gravatar.module
_ファイルの148行と156行を参照)。
この関数は_gravatar_get_account_user_picture()
自体を使用するため、オプションは次のとおりです。
gravatar_preprocess_user_picture()
関数をハックして、リンクなしで_<img>
_タグを返す<img>
_タグを抽出するために、独自の前処理関数でレンダリングされたHTMLにある種の恐ろしい正規表現を実行します個人的には、最初のオプションが最も望ましいと思います。
それを行うためのもう少し「Drupal」な方法は、関数自体の存在をチェックする代わりに、 module_exists()
を使用することです。 TRUE
を返します:
モジュールがインストールされて有効になっている場合
これは理想的ではありませんが、少しエレガントです。コードの長さが心配な場合は、少し短くすることができます。
_$uri = module_exists('gravatar') ? _gravatar_get_account_user_picture($user) : $user->picture->uri
if (file_valid_uri($uri)) {
$options = array('style_name' => 'thumbnail', 'uri' => $uri, 'alt' => 'Alt');
$img_html = theme('image_style', $options);
}
_
上記のコードは、_<img>
_タグのHTMLを theme_image_style()
を使用して直接生成しますが、URIを直接取得する必要はありません。
明らかに、Gravatarモジュールで直接処理するのが最善ですが、別のオプション(少しハックではあります)は、単純に
$img = strip_tags(theme("user_picture", array('account' => $user_item)), "<img>");