解决K2的图像字段中无法显示PDF文件问题

为什么不直接使用K2的附件功能?

K2的附件功能当然能够满足日常的附件需求,但并不适合每种场景。当我们需要每个附件作为一个单独的字段来展示和控制,默认的附件功能就有很多限制。K2的附件功能更多的是作为一个整体处理,而有时我们需要对每个附件定制样式、输出在页面的不同位置、后台编辑时也更好区别标识。

所以比较简单的解决方案,就是使用K2的图片类型的字段,作为附件字段。同样是打开媒体库,同样可以选择文件,基本上就可以满足我们的需求。但问题是,通过图片字段打开的媒体库,是不能够显示像PDF这类文件的。

解决后台编辑问题

解决的办法和思路,就是更改弹出的媒体库性质

修改文件administrator/components/com_k2/models/extrafield.php

编辑第337行(K2 v2.11.20230505)

<a class="k2app-ef-image-button k2Button" href="'.JURI::base(true).'/index.php?option=com_k2&view=media&type=image&tmpl=component&fieldID=K2ExtraField_'.$extraField->id.'">'.JText::_('K2_SELECT').'</a>';

替换成

<a class="k2app-ef-image-button k2Button" href="'.JURI::base(true).'/index.php?option=com_k2&view=media&type=attachment&tmpl=component&fieldID=K2ExtraField_'.$extraField->id.'">'.JText::_('K2_SELECT').'</a>';

即把type=image替换成type=attachment

解决前台输出问题

修完后台的编辑输入问题,还要解决前台的输出问题。因为K2图片类型的字段,前台会直接输出成图片,即输出的结果是被img标签所包裹。解决方法如下:

修改文件components/com_k2/models/item.php

编辑第1260行(K2 v2.11.20230505)

$value = '<img src="'.$src.'" alt="'.$rows[$i]->name.'" />';

替换成

$value = $src;

注意,以上操作都涉及修改K2核心文件,K2更新升级会丢失修改,亦存在一定的安全风险,修改前请做好相关备份和评估。