问题在于使用的 jQuery 插件。 AjaxUpload 似乎被不同的开发人员(完全)接管并重新设计(完全),原始(旧)文档的链接已失效(完全)。
好吧,在探索了那个 jQuery 插件之后,我发现它是这样工作的:在 ptoduct.tpl 你可以看到:
<?php foreach ($options as $option) { ?>
<?php if ($option['type'] == 'file') { ?>
<script type="text/javascript"><!--
new AjaxUpload('#button-option-<?php echo $option['product_option_id']; ?>', {
//...
});
//--></script>
<?php } ?>
<?php } ?>
这意味着对于文件类型的每个选项,此AjaxUpload 都会被实例化。基本上,它只创建一个包含 FILE 类型的 INPUT 且透明度为 0 的 DIV,该 DIV 在 Upload File 按钮上方呈现。这意味着当用户点击 Upload File 时,他点击的是 FILE 类型的 INPUT(不知道这一点)。现在,查看代码我可以看到无法设置此accept="image/*" 属性,因为不支持此(原始代码):
_createInput: function(){
var self = this;
var input = document.createElement("input");
input.setAttribute('type', 'file');
input.setAttribute('name', this._settings.name);
addStyles(input, {
// ...
});
// ...
},
所以现在如果您想添加对此的支持,您需要将此代码更改为此(文件:catalog/view/javascript/jquery/ajaxupload.js,大约第 350 行):
var input = document.createElement("input");
input.setAttribute('type', 'file');
input.setAttribute('name', this._settings.name);
if (this._settings.accept) {
input.setAttribute('accept', this._settings.accept);
}
并将product.tpl中的插件初始化代码更改为:
<?php foreach ($options as $option) { ?>
<?php if ($option['type'] == 'file') { ?>
<script type="text/javascript"><!--
new AjaxUpload('#button-option-<?php echo $option['product_option_id']; ?>', {
<?php if ($option['product_option_id'] == <IMAGE_FILE_OPTION_ID>) { ?>
accept: 'image/*',
<?php } else if ($option['product_option_id'] == <VIDEO_FILE_OPTION_ID>) { ?>
accept: 'video/*',
<?php } ?>
//...
});
//--></script>
<?php } ?>
<?php } ?>
这应该足够了。