修改FoF:Upload插件

Flarum站点使用的图片上传插件,他有自己的格式如下:

1
[upl-image-preview url={URL}]

当然这个格式肯定不是我想要的,于是乎需要对该插件进行一点小小的扩展;
通过在工程内搜索 [upl-image-preview url= 这串文本可以定位到 ImagePreviewTemplate.php 文件。

虽然我没做过php开发,但是略懂一点语法,找到BBCode的格式化的函数,修改之。

继续看这个ImagePreviewTemplate.php派生自AbstractTextFormatterTemplate.php文件,找到他的应用BBCode解析的函数,发现这是一个正则匹配模板,这样就只需要添加一个新的正则匹配即可。

效果达成,如果你也有类似需求可参考我的修改,文末奉上调整后的代码.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public function preview(File $file): string
{
$bbcode = $this->bbcode();

// 针对新的 bbcode 格式进行替换
return preg_replace_callback_array([
'/\]\((?<find>.*)\[\)/' => function ($m) use ($file) {
return str_replace($m['find'], $file->base_name, $m[0]);
},
'/size=(?<find>{.*?})/' => function ($m) use ($file) {
return str_replace($m['find'], $file->humanSize, $m[0]);
},
'/uuid=(?<find>{.*?})/' => function ($m) use ($file) {
return str_replace($m['find'], $file->uuid, $m[0]);
},
'/path=(?<find>{.*?})/' => function ($m) use ($file) {
return str_replace($m['find'], $file->path, $m[0]);
},
'/url=(?<find>{.*?})/' => function ($m) use ($file) {
return str_replace($m['find'], $file->url, $m[0]);
},
// 处理新的格式 '![]({URL})'
'/\!\[\]\((?<url>{.*?})\)/' => function ($m) use ($file) {
$replacedUrl = str_replace('{URL}', $file->url, $m['url']);
return '!['. $file->base_name. ']('. $replacedUrl. ')';
},
], $bbcode);
}

去文字说明部分

在hexo下一般会显示图片说明,如下图:

我这边是截图居多,不需要这个,可以做如下修改,改完之后就像上面这张图一样没有文字说明了:

1
2
3
return '!['. $file->base_name. ']('. $replacedUrl. ')';
替换为
return '![]('. $replacedUrl. ')';