【问题标题】:Opencart 2.0 Thumbnail image for uploaded file optionOpencart 2.0 上传文件选项的缩略图
【发布时间】:2015-09-25 14:43:04
【问题描述】:

我正在尝试在产品选项上添加已上传文件的缩略图。 我查看了 stackoverflow.com 并找到了以下页面,但这是针对 OpenCart 1.5.6

谁能告诉我如何在 OpenCart 2.0 中为文件上传创建缩略图

我尝试过,但 OpenCart 文件上传使用 ajax 文件上传,并且在 OpenCart 1.5.6 和 2.0 版本中存在很大差异 如果您看到下面的脚本,它在文件名为“Product.tpl”的打开购物车 1.5.6 中使用

`<script type="text/javascript"><!--
new AjaxUpload('#button-option-<?php echo $option['product_option_id']; ?>', {
    action: 'index.php?route=product/product/upload',
    name: 'file',
    autoSubmit: true,
    responseType: 'json',
    onSubmit: function(file, extension) {
        $('#button-option-<?php echo $option['product_option_id']; ?>').after('<img src="catalog/view/theme/default/image/loading.gif" class="loading" style="padding-left: 5px;" />');
        $('#button-option-<?php echo $option['product_option_id']; ?>').attr('disabled', true);
    },
    onComplete: function(file, json) {
        $('#button-option-<?php echo $option['product_option_id']; ?>').attr('disabled', false);
        
        $('.error').remove();
        
        if (json['success']) {
            alert(json['success']);
            
            $('input[name=\'option[<?php echo $option['product_option_id']; ?>]\']').attr('value', json['file']);
        }
        
        if (json['error']) {
            $('#option-<?php echo $option['product_option_id']; ?>').after('<span class="error">' + json['error'] + '</span>');
        }
        
        $('.loading').remove(); 
    }
});
//--></script>`

如果您看到下面的脚本,这是在 Product.tpl 中的 OpenCart 2.0 中使用的

`<script type="text/javascript"><!--
$('#button-cart').on('click', function() {
    $.ajax({
        url: 'index.php?route=checkout/cart/add',
        type: 'post',
        data: $('#product input[type=\'text\'], #product input[type=\'hidden\'], #product input[type=\'radio\']:checked, #product input[type=\'checkbox\']:checked, #product select, #product textarea'),
        dataType: 'json',
        beforeSend: function() {
            $('#button-cart').button('loading');
        },
        complete: function() {
            $('#button-cart').button('reset');
        },
        success: function(json) {
            $('.alert, .text-danger').remove();
            $('.form-group').removeClass('has-error');

            if (json['error']) {
                if (json['error']['option']) {
                    for (i in json['error']['option']) {
                        var element = $('#input-option' + i.replace('_', '-'));

                        if (element.parent().hasClass('input-group')) {
                            element.parent().after('<div class="text-danger">' + json['error']['option'][i] + '</div>');
                        } else {
                            element.after('<div class="text-danger">' + json['error']['option'][i] + '</div>');
                        }
                    }
                }

                if (json['error']['recurring']) {
                    $('select[name=\'recurring_id\']').after('<div class="text-danger">' + json['error']['recurring'] + '</div>');
                }

                // Highlight any found errors
                $('.text-danger').parent().addClass('has-error');
            }

            if (json['success']) {
                $('.breadcrumb').after('<div class="alert alert-success">' + json['success'] + '<button type="button" class="close" data-dismiss="alert">&times;</button></div>');

                $('#cart > button').html('<i class="fa fa-shopping-cart"></i> ' + json['total']);

                $('html, body').animate({ scrollTop: 0 }, 'slow');

                $('#cart > ul').load('index.php?route=common/cart/info ul li');
            }
        }
    });
});
//--></script>

我试图借助此链接在打开的购物车 1.5.6 中生成缩略图

Opencart - Customer uploads different files to one product with different responses from the site

工作正常 但它在 OpenCart 2.0 中不起作用,因为脚本完全不同,任何人都可以帮助我

【问题讨论】:

    标签: opencart


    【解决方案1】:

    对于 2.0 版本:2.2 直到 IMAGE MANAGERN UPLOGIN 不工作

    使用此代码由 VinaySingh43@gmail.com 修改

    路径:admin/controller/common/filemanager.php

    <?php
    
    class ControllerCommonFileManager extends Controller {
    
    public function index() {
    
    $this->load->language('common/filemanager');
    
    
    
    if (isset($this->request->get['filter_name'])) {
    
    $filter_name = rtrim(str_replace(array('../', '..\\', '..', '*'), '', $this->request->get['filter_name']), '/');
    
    } else {
    
    $filter_name = null;
    
    }
    
    
    
    // Make sure we have the correct directory
    
    if (isset($this->request->get['directory'])) {
    
    $directory = rtrim(DIR_IMAGE . 'catalog/' . str_replace(array('../', '..\\', '..'), '', $this->request->get['directory']), '/');
    
    } else {
    
    $directory = DIR_IMAGE . 'catalog';
    
    }
    
    
    
    if (isset($this->request->get['page'])) {
    
    $page = $this->request->get['page'];
    
    } else {
    
    $page = 1;
    
    }
    
    
    
    $data['images'] = array();
    
    
    
    $this->load->model('tool/image');
    
    
    
    // Get directories
    
    $directories = glob($directory . '/' . $filter_name . '*', GLOB_ONLYDIR);
    
    
    
    if (!$directories) {
    
    $directories = array();
    
    }
    
    
    
    // Get files
    
    // $files = glob($directory . '/' . $filter_name . '*.{jpg,jpeg,png,gif,JPG,JPEG,PNG,GIF}', GLOB_BRACE);
    
    
    
    $files1 = glob($directory . '/' . $filter_name . '*.jpg');
    
    if (!$files1) {
    
    $files1 = array();
    
    }
    
    
    
    $files2 = glob($directory . '/' . $filter_name . '*.jpeg');
    
    if (!$files2) {
    
    $files2 = array();
    
    }
    
    
    
    $files3 = glob($directory . '/' . $filter_name . '*.JPG');
    
    if (!$files3) {
    
    $files3 = array();
    
    }
    
    
    
    $files4 = glob($directory . '/' . $filter_name . '*.png');
    
    if (!$files4) {
    
    $files4 = array();
    
    }
    
    
    
    $files5 = glob($directory . '/' . $filter_name . '*.JPEG');
    
    if (!$files5) {
    
    $files5 = array();
    
    }
    
    
    
    $files6 = glob($directory . '/' . $filter_name . '*.PNG');
    
    if (!$files6) {
    
    $files6 = array();
    
    }
    
    
    
    $files7 = glob($directory . '/' . $filter_name . '*.GIF');
    
    if (!$files7) {
    
    $files7 = array();
    
    }
    
    $files8 = glob($directory . '/' . $filter_name . '*.gif');
    
    if (!$files8) {
    
    $files8 = array();
    
    }
    
    
    
    
    
    $files = array_merge($files1, $files2,$files3,$files4,$files5,$files6,$files7,$files8);
    
    
    
    
    
    // Merge directories and files
    
    $images = array_merge($directories, $files);
    
    
    
    // Get total number of files and directories
    
    $image_total = count($images);
    
    
    
    // Split the array based on current page number and max number of items per page of 10
    
    $images = array_splice($images, ($page - 1) * 16, 16);
    
    
    
    foreach ($images as $image) {
    
    $name = str_split(basename($image), 14);
    
    
    
    if (is_dir($image)) {
    
    	$url = '';
    
    
    
    	if (isset($this->request->get['target'])) {
    
    					$url .= '&target=' . $this->request->get['target'];
    
    	}
    
    
    
    	if (isset($this->request->get['thumb'])) {
    
    					$url .= '&thumb=' . $this->request->get['thumb'];
    
    	}
    
    
    
    	$data['images'][] = array(
    
    					'thumb' => '',
    
    					'name'  => implode(' ', $name),
    
    					'type'  => 'directory',
    
    					'path'  => utf8_substr($image, utf8_strlen(DIR_IMAGE)),
    
    					'href'  => $this->url->link('common/filemanager', 'token=' . $this->session->data['token'] . '&directory=' . urlencode(utf8_substr($image, utf8_strlen(DIR_IMAGE . 'catalog/'))) . $url, true)
    
    	);
    
    } elseif (is_file($image)) {
    
    	// Find which protocol to use to pass the full image link back
    
    	if ($this->request->server['HTTPS']) {
    
    					$server = HTTPS_CATALOG;
    
    	} else {
    
    					$server = HTTP_CATALOG;
    
    	}
    
    
    
    	$data['images'][] = array(
    
    					'thumb' => $this->model_tool_image->resize(utf8_substr($image, utf8_strlen(DIR_IMAGE)), 100, 100),
    
    					'name'  => implode(' ', $name),
    
    					'type'  => 'image',
    
    					'path'  => utf8_substr($image, utf8_strlen(DIR_IMAGE)),
    
    					'href'  => $server . 'image/' . utf8_substr($image, utf8_strlen(DIR_IMAGE))
    
    	);
    
    }
    
    }
    
    
    
    $data['heading_title'] = $this->language->get('heading_title');
    
    
    
    $data['text_no_results'] = $this->language->get('text_no_results');
    
    $data['text_confirm'] = $this->language->get('text_confirm');
    
    
    
    $data['entry_search'] = $this->language->get('entry_search');
    
    $data['entry_folder'] = $this->language->get('entry_folder');
    
    
    
    $data['button_parent'] = $this->language->get('button_parent');
    
    $data['button_refresh'] = $this->language->get('button_refresh');
    
    $data['button_upload'] = $this->language->get('button_upload');
    
    $data['button_folder'] = $this->language->get('button_folder');
    
    $data['button_delete'] = $this->language->get('button_delete');
    
    $data['button_search'] = $this->language->get('button_search');
    
    
    
    $data['token'] = $this->session->data['token'];
    
    
    
    if (isset($this->request->get['directory'])) {
    
    $data['directory'] = urlencode($this->request->get['directory']);
    
    } else {
    
    $data['directory'] = '';
    
    }
    
    
    
    if (isset($this->request->get['filter_name'])) {
    
    $data['filter_name'] = $this->request->get['filter_name'];
    
    } else {
    
    $data['filter_name'] = '';
    
    }
    
    
    
    // Return the target ID for the file manager to set the value
    
    if (isset($this->request->get['target'])) {
    
    $data['target'] = $this->request->get['target'];
    
    } else {
    
    $data['target'] = '';
    
    }
    
    
    
    // Return the thumbnail for the file manager to show a thumbnail
    
    if (isset($this->request->get['thumb'])) {
    
    $data['thumb'] = $this->request->get['thumb'];
    
    } else {
    
    $data['thumb'] = '';
    
    }
    
    
    
    // Parent
    
    $url = '';
    
    
    
    if (isset($this->request->get['directory'])) {
    
    $pos = strrpos($this->request->get['directory'], '/');
    
    
    
    if ($pos) {
    
    	$url .= '&directory=' . urlencode(substr($this->request->get['directory'], 0, $pos));
    
    }
    
    }
    
    
    
    if (isset($this->request->get['target'])) {
    
    $url .= '&target=' . $this->request->get['target'];
    
    }
    
    
    
    if (isset($this->request->get['thumb'])) {
    
    $url .= '&thumb=' . $this->request->get['thumb'];
    
    }
    
    
    
    $data['parent'] = $this->url->link('common/filemanager', 'token=' . $this->session->data['token'] . $url, true);
    
    
    
    // Refresh
    
    $url = '';
    
    
    
    if (isset($this->request->get['directory'])) {
    
    $url .= '&directory=' . urlencode($this->request->get['directory']);
    
    }
    
    
    
    if (isset($this->request->get['target'])) {
    
    $url .= '&target=' . $this->request->get['target'];
    
    }
    
    
    
    if (isset($this->request->get['thumb'])) {
    
    $url .= '&thumb=' . $this->request->get['thumb'];
    
    }
    
    
    
    $data['refresh'] = $this->url->link('common/filemanager', 'token=' . $this->session->data['token'] . $url, true);
    
    
    
    $url = '';
    
    
    
    if (isset($this->request->get['directory'])) {
    
    $url .= '&directory=' . urlencode(html_entity_decode($this->request->get['directory'], ENT_QUOTES, 'UTF-8'));
    
    }
    
    
    
    if (isset($this->request->get['filter_name'])) {
    
    $url .= '&filter_name=' . urlencode(html_entity_decode($this->request->get['filter_name'], ENT_QUOTES, 'UTF-8'));
    
    }
    
    
    
    if (isset($this->request->get['target'])) {
    
    $url .= '&target=' . $this->request->get['target'];
    
    }
    
    
    
    if (isset($this->request->get['thumb'])) {
    
    $url .= '&thumb=' . $this->request->get['thumb'];
    
    }
    
    
    
    $pagination = new Pagination();
    
    $pagination->total = $image_total;
    
    $pagination->page = $page;
    
    $pagination->limit = 16;
    
    $pagination->url = $this->url->link('common/filemanager', 'token=' . $this->session->data['token'] . $url . '&page={page}', true);
    
    
    
    $data['pagination'] = $pagination->render();
    
    
    
    $this->response->setOutput($this->load->view('common/filemanager', $data));
    
    }
    
    
    
    public function upload() {
    
    $this->load->language('common/filemanager');
    
    
    
    $json = array();
    
    
    
    // Check user has permission
    
    if (!$this->user->hasPermission('modify', 'common/filemanager')) {
    
    $json['error'] = $this->language->get('error_permission');
    
    }
    
    
    
    // Make sure we have the correct directory
    
    if (isset($this->request->get['directory'])) {
    
    $directory = rtrim(DIR_IMAGE . 'catalog/' . str_replace(array('../', '..\\', '..'), '', $this->request->get['directory']), '/');
    
    } else {
    
    $directory = DIR_IMAGE . 'catalog';
    
    }
    
    
    
    // Check its a directory
    
    if (!is_dir($directory)) {
    
    $json['error'] = $this->language->get('error_directory');
    
    }
    
    
    
    if (!$json) {
    
    if (!empty($this->request->files['file']['name']) && is_file($this->request->files['file']['tmp_name'])) {
    
    	// Sanitize the filename
    
    	$filename = basename(html_entity_decode($this->request->files['file']['name'], ENT_QUOTES, 'UTF-8'));
    
    
    
    	// Validate the filename length
    
    	if ((utf8_strlen($filename) < 3) || (utf8_strlen($filename) > 255)) {
    
    					$json['error'] = $this->language->get('error_filename');
    
    	}
    
    
    
    	// Allowed file extension types
    
    	$allowed = array(
    
    					'jpg',
    
    					'jpeg',
    
    					'gif',
    
    					'png'
    
    	);
    
    
    
    	if (!in_array(utf8_strtolower(utf8_substr(strrchr($filename, '.'), 1)), $allowed)) {
    
    					$json['error'] = $this->language->get('error_filetype');
    
    	}
    
    
    
    	// Allowed file mime types
    
    	$allowed = array(
    
    					'image/jpeg',
    
    					'image/pjpeg',
    
    					'image/png',
    
    					'image/x-png',
    
    					'image/gif'
    
    	);
    
    
    
    	if (!in_array($this->request->files['file']['type'], $allowed)) {
    
    					$json['error'] = $this->language->get('error_filetype');
    
    	}
    
    
    
    	// Return any upload error
    
    	if ($this->request->files['file']['error'] != UPLOAD_ERR_OK) {
    
    					$json['error'] = $this->language->get('error_upload_' . $this->request->files['file']['error']);
    
    	}
    
    } else {
    
    	$json['error'] = $this->language->get('error_upload');
    
    }
    
    }
    
    
    
    if (!$json) {
    
    move_uploaded_file($this->request->files['file']['tmp_name'], $directory . '/' . $filename);
    
    
    
    $json['success'] = $this->language->get('text_uploaded');
    
    }
    
    
    
    $this->response->addHeader('Content-Type: application/json');
    
    $this->response->setOutput(json_encode($json));
    
    }
    
    
    
    public function folder() {
    
    $this->load->language('common/filemanager');
    
    
    
    $json = array();
    
    
    
    // Check user has permission
    
    if (!$this->user->hasPermission('modify', 'common/filemanager')) {
    
    $json['error'] = $this->language->get('error_permission');
    
    }
    
    
    
    // Make sure we have the correct directory
    
    if (isset($this->request->get['directory'])) {
    
    $directory = rtrim(DIR_IMAGE . 'catalog/' . str_replace(array('../', '..\\', '..'), '', $this->request->get['directory']), '/');
    
    } else {
    
    $directory = DIR_IMAGE . 'catalog';
    
    }
    
    
    
    // Check its a directory
    
    if (!is_dir($directory)) {
    
    $json['error'] = $this->language->get('error_directory');
    
    }
    
    
    
    if (!$json) {
    
    // Sanitize the folder name
    
    $folder = str_replace(array('../', '..\\', '..'), '', basename(html_entity_decode($this->request->post['folder'], ENT_QUOTES, 'UTF-8')));
    
    
    
    // Validate the filename length
    
    if ((utf8_strlen($folder) < 3) || (utf8_strlen($folder) > 128)) {
    
    	$json['error'] = $this->language->get('error_folder');
    
    }
    
    
    
    // Check if directory already exists or not
    
    if (is_dir($directory . '/' . $folder)) {
    
    	$json['error'] = $this->language->get('error_exists');
    
    }
    
    }
    
    
    
    if (!$json) {
    
    mkdir($directory . '/' . $folder, 0777);
    
    chmod($directory . '/' . $folder, 0777);
    
    
    
    $json['success'] = $this->language->get('text_directory');
    
    }
    
    
    
    $this->response->addHeader('Content-Type: application/json');
    
    $this->response->setOutput(json_encode($json));
    
    }
    
    
    
    public function delete() {
    
    $this->load->language('common/filemanager');
    
    
    
    $json = array();
    
    
    
    // Check user has permission
    
    if (!$this->user->hasPermission('modify', 'common/filemanager')) {
    
    $json['error'] = $this->language->get('error_permission');
    
    }
    
    
    
    if (isset($this->request->post['path'])) {
    
    $paths = $this->request->post['path'];
    
    } else {
    
    $paths = array();
    
    }
    
    
    
    // Loop through each path to run validations
    
    foreach ($paths as $path) {
    
    $path = rtrim(DIR_IMAGE . str_replace(array('../', '..\\', '..'), '', $path), '/');
    
    
    
    // Check path exsists
    
    if ($path == DIR_IMAGE . 'catalog') {
    
    	$json['error'] = $this->language->get('error_delete');
    
    
    
    	break;
    
    }
    
    }
    
    
    
    if (!$json) {
    
    // Loop through each path
    
    foreach ($paths as $path) {
    
    	$path = rtrim(DIR_IMAGE . str_replace(array('../', '..\\', '..'), '', $path), '/');
    
    
    
    	// If path is just a file delete it
    
    	if (is_file($path)) {
    
    					unlink($path);
    
    
    
    	// If path is a directory beging deleting each file and sub folder
    
    	} elseif (is_dir($path)) {
    
    					$files = array();
    
    
    
    					// Make path into an array
    
    					$path = array($path . '*');
    
    
    
    					// While the path array is still populated keep looping through
    
    					while (count($path) != 0) {
    
    									$next = array_shift($path);
    
    
    
    									foreach (glob($next) as $file) {
    
    													// If directory add to path array
    
    													if (is_dir($file)) {
    
    																	$path[] = $file . '/*';
    
    													}
    
    
    
    													// Add the file to the files to be deleted array
    
    													$files[] = $file;
    
    									}
    
    					}
    
    
    
    					// Reverse sort the file array
    
    					rsort($files);
    
    
    
    					foreach ($files as $file) {
    
    									// If file just delete
    
    									if (is_file($file)) {
    
    													unlink($file);
    
    
    
    									// If directory use the remove directory function
    
    									} elseif (is_dir($file)) {
    
    													rmdir($file);
    
    									}
    
    					}
    
    	}
    
    }
    
    
    
    $json['success'] = $this->language->get('text_delete');
    
    }
    
    
    
    $this->response->addHeader('Content-Type: application/json');
    
    $this->response->setOutput(json_encode($json));
    
    }
    
    }

    【讨论】:

    • 感谢这项工作,我已根据我的要求进行了修改
    【解决方案2】:

    我知道这是一个老问题,但也许这仍然有帮助。

    您只需将这一行添加到上传控制器:

    $json['file'] = "system/upload/" . $file;
    

    下面一行到product.tpl:

    $(node).parent().find('input').after('<img class="text-danger"><img src=' + json['file'] + '></div>');
    

    然后可能是一些样式元素。

    【讨论】:

      猜你喜欢
      • 2014-12-22
      • 1970-01-01
      • 2019-01-06
      • 2011-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-13
      相关资源
      最近更新 更多