2014-04-03 45 views
0

我正在使用OpenCart 1.5.6,並有兩個選項供客戶將文件上傳到產品(圖像和視頻)。當用戶點擊上傳時,我希望他們只能在瀏覽文件時從計算機中選擇特定的文件類型。因此,而不是瀏覽器窗口中的「所有文件」,我希望它只允許.png,.jpg,.jpeg,.pdf等用於圖像上傳以及我只希望它查找的視頻文件.mp4 ,.mov,.flv。Opencart - 上傳特定文件類型

下面是一個例子:http://jsfiddle.net/VCdvA/

我曾嘗試使用接受屬性according to this post但它不工作。

這裏是我的product.tpl代碼:

<input type="button" accept="video/*,image/*" value="<?php echo $button_upload; ?>" id="button-option-<?php echo $option['product_option_id']; ?>" class="button" > 
    <input type="hidden" name="option[<?php echo $option['product_option_id']; ?>]" value="" /> 

我覺得現在的問題是,它是類型=「按鈕」,而不是類型=「文件」。是否有另一種方法來限制OpenCart產品頁面中的上傳文件類型?

回答

0

問題是使用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被實例化。基本上它只創建一個DIV,其中包含輸入爲0的不透明度的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更改插件initializiation代碼:

<?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 } ?> 

這應該夠了。

+0

這聽起來不錯,有點作品。首先我必須添加一個來自其他的,如果沒有得到意外的其他錯誤。我還有其他問題,如果其他語句。基本上,當我將它添加到文件並上傳時,它不允許我單擊按鈕。只有我輸入的第一個作品。如果我刪除else if語句,它們都起作用(儘管它不限制其中之一,因爲代碼不在那裏)。是否有一個原因,兩個命令不適用於ajax代碼? – MattM

+0

<?php if($ option ['product_option_id'] == 228){?> \t \t accept:'video/*', <?php} elseif($ option ['product_option_id'] == 227){ ?> \t \t accept:'image/*'; MattM

+0

以下網址爲:http://zing-cards.com/dev/storefront/index.php?route=product/product&path=59&product_id=50 – MattM