概要#
Z-BlogPHP でランダム画像 API を使用してサムネイルを作成します。
コード#
/**
* 画像の抽出または設定
*
* @param object $article
* @param string $type 返り値の形式を決定するために使用
* @return string imgurl | <img />
*/
function demoAPP_Thumbnail($article, $type = 'imgurl')
{
$matches = null;
preg_match_all("/<img[^>]*src=\"([^\"]+)\"[^>]*>/i", $article->Content, $matches);
if (isset($matches[1]) && count($matches[1]) > 0) {
$imgurl = $matches[1][0];
} else {
$imgurl = demoAPP_setRndImg($article->ID);
// $imgurl = demoAPP_setRndImgNetwork(); // 現在の要件ではこの方法は適切ではありません。サービスプロバイダに制限される可能性があります
}
// デフォルトでは画像のURLを返す
if ($type == 'imgurl') {
return $imgurl;
}
// 他の値を渡すと <img /> タグを返す
$tplImg = '<img src="imgurl" alt="title">';
return strtr($tplImg, array('imgurl' => $imgurl, 'title' => $article->Title));
}
/**
* 直接参照できるランダム画像API
*
* @param string $rndhash 画像の重複を防ぐためのパラメータを渡す
* @return string
*/
function demoAPP_setRndImg($rndhash)
{
return "https://picsum.photos/350/260?random={$rndhash}";
}
/**
* API自体はJSONを返すため、画像のURLを追加で抽出する必要があります
*
* @return string
*/
function demoAPP_setRndImgNetwork()
{
global $zbp;
// 失敗時のデフォルト画像
$imgurl = "{$zbp->host}zb_users/theme/demoAPP/var/images/no-image.jpg";
// APIのURL
$url = "https://api.vvhan.com/api/acgimg?type=json";
$http = Network::Create();
$http->open('GET', $url);
// $http->setTimeOuts(10, 10, 0, 0);
$http->send();
// 取得したコンテンツの解析
if ($http->status == 200 && $json = json_decode($http->responseText, true)) {
// 実際のAPIに基づいて返すフィールド
$imgurl = $json['imgurl'];
}
return $imgurl;
}
テンプレート内での呼び出し:
<a href="{$article.Url}" title="{$article.Title}">
{demoAPP_Thumbnail($article,1)}
</a>
推奨#
Z-BlogPHP 1.7 のサムネイルに関する記録_コンピューターネットワーク_沈氷浮水:
https://www.wdssmq.com/post/20210224481.html
[開発者] 正規表現に関するスレッド - 開発者センター - ZBlogger 技術交流センター: