Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

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


Recommended Posts

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

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

Надіслати
Поділитися на інших сайтах


  • 3 weeks later...

Помощь - надо внести изменения в файл 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));
    }
}
Надіслати
Поділитися на інших сайтах


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

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

Надіслати
Поділитися на інших сайтах


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

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

?>
Надіслати
Поділитися на інших сайтах


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

Надіслати
Поділитися на інших сайтах


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

Надіслати
Поділитися на інших сайтах

Надіслати
Поділитися на інших сайтах

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

 

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

 

 

filemaneger_update2.zip

  • +1 2
Надіслати
Поділитися на інших сайтах

  • 3 weeks later...

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

 

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

Надіслати
Поділитися на інших сайтах

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

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

Змінено користувачем sifo
Надіслати
Поділитися на інших сайтах


  • 2 months later...

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

 

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

 

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

Надіслати
Поділитися на інших сайтах


  • 6 months later...
В 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 months later...
В 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 months later...

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.