解决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更新升级会丢失修改,亦存在一定的安全风险,修改前请做好相关备份和评估。