Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...

Менеджер изображений


misskuzi
 Поделиться

Рекомендованные сообщения

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

как это исправить?

Ссылка на комментарий
Поделиться на других сайтах


Уважаемые форумчане помогите, а то напрягает добавлять изображения каждый раз проходя через "дерево"

Ссылка на комментарий
Поделиться на других сайтах


  • 3 недели спустя...

Помощь - надо внести изменения в файл admin\controller\common\filemanager.php.

Изменения пометил комментариями на русском. Можно в Notepad++ открыть, выставить синтаксис PHP и посмотреть (комментарии буду зелёным выделены).

Если не получится, то возможно из-за другой версии,  я на версии 2.0.3.1 исправлял. В этом случае могу у тебя на сайте поправить.

<?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';
        }
        */
        // НОВЫЙ КОД. НАЧАЛО
        $path = null;
        if (isset($this->request->get['directory']))
        {
            $path = $this->request->get['directory'];
            setcookie("LAST_DIR", $path, time()+3600);
            $directory = rtrim(DIR_IMAGE . 'catalog/' . str_replace(array('../', '..\\', '..'), '', $path), '/');
        }
        else if (isset($_COOKIE['LAST_DIR']))
        {
            $path = $_COOKIE['LAST_DIR'];
            $directory = rtrim(DIR_IMAGE . 'catalog/' . str_replace(array('../', '..\\', '..'), '', $path), '/');
            if(!is_dir($directory))
            {
                $path = null;
                $directory = DIR_IMAGE . 'catalog';
            }
        }
        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);

        if (!$files) {
            $files = array();
        }

        // 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, 'SSL')
                );
            } 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'] = '';
        }
        */
        // НОВЫЙ КОД - одна нижестоящая строка
        $data['directory'] = $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($path){
            $pos = strrpos($path, '/');
            if ($pos) {
                $url .= '&directory=' . urlencode(substr($path, 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, 'SSL');

        // Refresh
        $url = '';

        // ТУТ ЗАКОММЕНТИРОВАН СТАРЫЙ КОД (/* - начало, */ - конец комментария)
        /*
        if (isset($this->request->get['directory'])) {
            $url .= '&directory=' . urlencode($this->request->get['directory']);
        }
        */
        // НОВЫЙ КОД. НАЧАЛО
        if ($path) {
            $url .= '&directory=' . urlencode($path);
        }
        // НОВЫЙ КОД. КОНЕЦ

        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, 'SSL');

        $url = '';

        // ТУТ ЗАКОММЕНТИРОВАН СТАРЫЙ КОД (/* - начало, */ - конец комментария)
        /*
        if (isset($this->request->get['directory'])) {
            $url .= '&directory=' . urlencode(html_entity_decode($this->request->get['directory'], ENT_QUOTES, 'UTF-8'));
        }
        */
        // НОВЫЙ КОД. НАЧАЛО
        if ($path) {
            $url .= '&directory=' . urlencode(html_entity_decode($path, 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}', 'SSL');

        $data['pagination'] = $pagination->render();

        $this->response->setOutput($this->load->view('common/filemanager.tpl', $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';
        }
        */
        // НОВЫЙ КОД. НАЧАЛО
        if (isset($this->request->get['directory'])) {
            $directory = $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');
                }

                // Check to see if any PHP files are trying to be uploaded
                $content = file_get_contents($this->request->files['file']['tmp_name']);

                if (preg_match('/\<\?php/i', $content)) {
                    $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';
        }
        */
        // НОВЫЙ КОД. НАЧАЛО
        if (isset($this->request->get['directory']))
        {
            $directory = $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);

            $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));
    }
}
Ссылка на комментарий
Поделиться на других сайтах


Кому поможет отписывайтесь - на какой версии помогло. Перед изменениями на всякий случай создайте копию изменяемого файла.

Ссылка на комментарий
Поделиться на других сайтах


Кому поможет отписывайтесь - на какой версии помогло. Перед изменениями на всякий случай создайте копию изменяемого файла.

заменил код в файле, менеджер изображений вообще перестал открываться ((

Ссылка на комментарий
Поделиться на других сайтах


если хочешь могу на сайте у тебя поправить или скинь свой filemanager.php, чтобы сравнить и посмотреть из-за чего может быть ошибка

Ссылка на комментарий
Поделиться на других сайтах


klimbronin , используйте для кода кнопочку "код" при написании сообщения. Иначе его невозможно читать и непредсказуем результат копирования. А еще там есть кнопочка "спойлер".

Вашу портянку всю не просматривал, но, как минимум, не хватает закрывающего

?>
Ссылка на комментарий
Поделиться на других сайтах


klimbronin, спасибо Вам за код. Тестировали на 2.1.0.2 в общем-то все работает, путь действительно запоминается, это нааамного облегчило добавление товаров. Но есть одно но, не знаю с чем это связано но после входа из папки categories(основная папка) в любую другую, обратно вернуться не получается. Если задача просто добавлять фото для товара, это не так важно, но просто хочу сообщить, что есть такая проблема.

Ссылка на комментарий
Поделиться на других сайтах


Протестируйте на сборке Ocstore последней и это можно выложить в следующем релизе.

Ссылка на комментарий
Поделиться на других сайтах

Ссылка на комментарий
Поделиться на других сайтах

Небольшая модификация.В дополнение к предыдущему решению убирает пагинацию  заменяя её скролом (как в версии 1.5).

 

PS Сделать предварительно бэкап аналогичных файлов  в магазине.Заменить после файлами из архива.

 

 

filemaneger_update2.zip

  • +1 2
Ссылка на комментарий
Поделиться на других сайтах

  • 3 недели спустя...

Не работает символ '&' в названиях папок и файлов - становится не доступным папка и файл не грузится.

 

не используйте нестандартные символы в названии и проблем не будет

Ссылка на комментарий
Поделиться на других сайтах

  1. А вывод папок списком, а не плиткой, реально сделать? при этом вывод изображений оставить плиткой.

Названия некоторых папок почему то разделяются пробелами посреди слова, например: "Clea n Dew Mi nt O il". У всех так ?

Изменено пользователем sifo
Ссылка на комментарий
Поделиться на других сайтах


  • 2 месяца спустя...

ОС 2.2. стандартный шаблон.

 

1) Как сделать, чтобы фотки показывались по дате добавления (последние) ?

 

2) Как показать все фотки, без пагинации в папке?

Ссылка на комментарий
Поделиться на других сайтах


  • 6 месяцев спустя...
В 14.07.2016 в 19:27, bitterlemon сказал:

1) Как сделать, чтобы фотки показывались по дате добавления (последние) ?

Где-то видел, что в admin/controller/common/filemanager.php перед:

foreach ($files as $file) {

нужно добавить:

usort($files, create_function('$a,$b', 'return filemtime($b) - filemtime($a);'));

Но у меня  в ocStore 2.1.0.2.1 почему-то сортировка по дате все равно не работает.

Изменено пользователем kos0760
Ссылка на комментарий
Поделиться на других сайтах


Кажется решил проблему. Эту строку:

usort($files, create_function('$a,$b', 'return filemtime($b) - filemtime($a);'));

нужно вставлять после:

// Get files
		$files = glob($directory . '/' . $filter_name . '*.{jpg,jpeg,png,gif,JPG,JPEG,PNG,GIF}', GLOB_BRACE);

и последнее добавленное изображение в списке находится в самом начале.

Изменено пользователем kos0760
Ссылка на комментарий
Поделиться на других сайтах


https://www.opencart.com/index.php?route=marketplace/extension/info&extension_id=8221&filter_search=Image manager&filter_license=free&filter_download_id=47

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

Полезно? Плюсани :)

  • +1 7
Ссылка на комментарий
Поделиться на других сайтах


  • 2 месяца спустя...
В 27.01.2017 в 18:26, bitrixlviv сказал:

https://www.opencart.com/index.php?route=marketplace/extension/info&extension_id=8221&filter_search=Image manager&filter_license=free&filter_download_id=47

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

Полезно? Плюсани :)

Чувак! Я тебя люблю! Спасибо ОГРОМНОЕ =)

  • +1 2
Ссылка на комментарий
Поделиться на других сайтах


В продолжение к предыдущему посту. Если у кого-то "исчезают" папки при открытии в окне загрузки: называйте их на транслите и без запятых...

Ссылка на комментарий
Поделиться на других сайтах


  • 9 месяцев спустя...

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
 Поделиться

×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.