Загрузка и вставка файлов через стандартный файлменеджер

sol_los

Мой дом здесь!
Регистрация
17 Окт 2011
Сообщения
424
Реакции
278
Задолбал этот опенкарт - на каждую банальную хрень приходится искать модуль.
Вот и в этот раз - клиенту понадобилось загружать на сайт файлы и добавлять в текст, ну неужели нельзя это было сделать из коробки? ведь не все умеют ковырять исходный код или загружать файлы через фтп и создавать ссылки.

ocmod не стал делать, ввиду постоянных изменений от версии к версии - потому просто инструкция, по которой можно будет в любой версии сварганить что-то подобное.

идем по пути admin/controller/common и правим filemanager.php
находим такие вот массивы с определением расширения файла

// Allowed file extension types
PHP:
                    $allowed = array(
                        'jpg',
                        'jpeg',
                        'gif',
                        'png',
и добавляем сюда свои
PHP:
                       'pdf',             
                        'doc',
                        'docx',
                        'xls',
                        'xlsx'

далее опять смотрим уже mime файлов

// Allowed file mime types
PHP:
                    $allowed = array(
                        'image/jpeg',
                        'image/pjpeg',
                        'image/png',
                        'image/x-png',
                        'image/gif',

и добавляем свои

PHP:
                        'application/pdf',
                        'application/vnd.ms-excel',
                        'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
                        'application/msword',
                        'application/vnd.openxmlformats-officedocument.wordprocessingml.document'

в этом же файле, не обязательная часть, а так - для эстетики
находим
Код:
} elseif (is_file($image)) {
                $data['images'][] = array(
в этой конструкции есть такая позиция
PHP:
'type'  => 'image',
заменяем ее на
PHP:
'type'  => (mime_content_type($image) == "image/jpeg" || mime_content_type($image) == "image/gif" || mime_content_type($image) == "image/png") ? 'image' : 'doc',
сейчас покажу для чего это нужно
идем по пути admin/view/template/common и редактируем filemanager.tpl
в нем находим конструкцию
PHP:
<?php if ($image['type'] == 'image') { ?>
          <a href="<?php echo $image['href']; ?>" class="thumbnail">
              <img src="<?php echo $image['thumb']; ?>" alt="<?php echo $image['name']; ?>" title="<?php echo $image['name']; ?>" /></a>
          <label>
            <input type="checkbox" name="path[]" value="<?php echo $image['path']; ?>" />
            <?php echo $image['name']; ?></label>
          <?php } ?>
вот для чего мы сделали замену в предыдущем файле - здесь проверяется тип файла и если он image - показываем это самое изображение, если это file - просто показываем иконку файла
добавляем после вышенайденной конструкции
PHP:
          <?php if ($image['type'] == 'doc') { ?>
              <a href="<?php echo $image['href']; ?>" class="thumbnail">
                  <img src="<?php echo HTTPS_CATALOG; ?>/image/files.png" alt="<?php echo $image['name']; ?>" title="<?php echo $image['name']; ?>" /></a>
              <label>
                <input type="checkbox" name="path[]" value="<?php echo $image['path']; ?>" />
                <?php echo $image['name']; ?></label>
              <?php } ?>
если у вас сайт без ssl - вместо HTTPS_CATALOG используем HTTP_CATALOG
также я в папку images положил свою иконку files.png - так что можете тоже найти свою.
при желании можно даже сделать на каждое расширение свою иконку, но мне это уже **х не нужно.

после этих манипуляций будет работать как загрузка файлов так и их отображение в файлменеджере.

теперь нам нужно вставить ссылку на этот файл в редакторе
идем по пути admin/view/javascript/summernote открываем opencart.js

добавляем в самом начале или в самом конце файла

Код:
function getFileMan(){ 
 
                            $('#modal-image').remove();
                     
                            $.ajax({
                                url: 'index.php?route=common/filemanager&token=' + getURLVar('token'),
                                dataType: 'html',
                                beforeSend: function() {
                                    $('#button-image i').replaceWith('<i class="fa fa-circle-o-notch fa-spin"></i>');
                                    $('#button-image').prop('disabled', true);
                                },
                                complete: function() {
                                    $('#button-image i').replaceWith('<i class="fa fa-upload"></i>');
                                    $('#button-image').prop('disabled', false);
                                },
                                success: function(html) {
                                    $('body').append('<div id="modal-image" class="modal">' + html + '</div>');
                                 
                                    $('#modal-image').modal('show');
                                 
                                    $('#modal-image').delegate('a.thumbnail', 'click', function(e) {
                                        e.preventDefault();
                                     
                                        $('.note-link-url').val($(this).attr('href'));
                                     
                                        $('#modal-image').modal('hide');
                                    });
                                }
                            });                     
                     
 
}

теперь редактируем там же файл summernote.js

находим в нем
Код:
'<input class="note-link-url form-control" type="text" value="http://" />' +
и заменяем на
Код:
'<div class="input-group">'+
                   '<input class="note-link-url form-control" type="text" value="http://" />' +
                   '<span class="input-group-btn">'+
                   '<button class="fileman form-control" type="button" onclick="getFileMan(e);false;">File</button>' +
                   '</span>'+
                   '</div>'+
сохраняем все эти дела и идем любоваться - в любом месте где работает summernote жмем кнопку "Ссылка" - и наблюдаем у поля ввода ссылки кнопку File - при нажатии на которую открывается файлменеджер - в котором мы жмякаем на нужный нам файл и ссылка на этот файл копируется в стандартное поле для ссылки
summ-link.JPG
 
Последнее редактирование:
Назад
Сверху