Flarum站点使用的图片上传插件,他有自己的格式如下:
[upl-image-preview url={URL}]
当然这个格式肯定不是我想要的,于是乎需要对该插件进行一点小小的扩展;
通过在工程内搜索[upl-image-preview url=
这串文本可以定位到 ImagePreviewTemplate.php 文件。
虽然我没做过php开发,但是略懂一点语法,找到BBCode的格式化的函数,修改之。
继续看这个ImagePreviewTemplate.php派生自AbstractTextFormatterTemplate.php文件,找到他的应用BBCode解析的函数,发现这是一个正则匹配模板,这样就只需要添加一个新的正则匹配即可。
效果达成,如果你也有类似需求可参考我的修改,文末奉上调整后的代码.
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);
}