Улучшение стандартного файлового менеджера

Тема в разделе "Общие вопросы", создана пользователем Metallikus, 14 янв 2016.

  1. Metallikus

    Metallikus Новичок

    Сообщения:
    16
    Симпатии:
    5
    TL;DR Как заставить стандартный менеджер сохранять пути?

    Стандартный файловый менеджер в opencart 2.1.0.1 устраивает практически всем. Если бы он ещё запоминал последнюю открытую в нём папку, цены бы ему не было, но он этого не делает. В принципе, доработать не долго:
    1) При выборе файла сохранить в куки папку и номер страницы.
    2) При вызове ФМ считывать эти данные из куки.

    Кто-нибудь такое уже делал, есть готовый модификатор/инструкция? А то велосипеды плодить не хочется, да и где там в этих контролёрах, моделях и шаблонах правки вносить мне пока сложновато найти бывает.
     
  2. Vlad

    Vlad Эксперт

    Сообщения:
    4.129
    Симпатии:
    999
    как помнится вот тут надо вносить правки admin\view\javascript\common.js
     
    Metallikus нравится это.
  3. Metallikus

    Metallikus Новичок

    Сообщения:
    16
    Симпатии:
    5
    Нашёл куда впихнуть сохранение куки. Файл "/admin/view/template/common/filemanager.tpl" 63 строка, после "$('#modal-image').modal('hide');" и перед закрывающей "}":

    Код:
        var date = new Date(); //нужно для установки времени жизни кук
        var page_number = document.querySelector('.pagination .active span'); //текущий номер страницы
        if (page_number) {
            //Пишем куку, если номер страницы есть
            date.setTime(date.getTime() + (1000 * 24 * 60 * 60 * 1000)); //срок жизни задаём 1000 дней
            document.cookie = encodeURIComponent("page") +
            "=" + encodeURIComponent(page_number.innerHTML) + "; expires=" + date.toGMTString(); + "; path=/";
        }
        else {
            //удаляем куку, если номера страницы нет
            date.setTime(date.getTime() -1); //отрицательный срок жизни удалит куку
            document.cookie = encodeURIComponent("page") +
            "=" + "; expires=" + date.toGMTString(); + "; path=/";
        }
       
        //Сохраняем текущий путь в куки
        date.setTime(date.getTime() + (1000 * 24 * 60 * 60 * 1000)); //срок жизни задаём 1000 дней
        document.cookie = encodeURIComponent("directory") +
        "=<?php echo $directory; ?>" + "; expires=" + date.toGMTString(); + "; path=/";
    
    В общем, осталось найти где эти куки должны считываться. Вопросы:
    1) А нет ли где в куче подключенных js функции сохранения куков, чтобы мне её использовать?
    2) А нет ли менее костыльного способа узнать номер страницы?
     
    Последнее редактирование: 14 янв 2016
    solunski.d нравится это.
  4. Metallikus

    Metallikus Новичок

    Сообщения:
    16
    Симпатии:
    5
    Считывать куки надо в файле admin\view\javascript\common.js, спс за наводку. Начало функции "$('#button-image').on('click', function() {" в 151 строчке меняем на
    Код:
    $('#button-image').on('click', function() {
                $('#modal-image').remove();
                //Функция чтения куков
                function readCookie(name) {
                   var nameEQ = encodeURIComponent(name) + "=";
                   var ca = document.cookie.split(';');
                   for (var i = 0; i < ca.length; i++) {
                       var c = ca[i];
                       while (c.charAt(0) === ' ') c = c.substring(1, c.length);
                       if (c.indexOf(nameEQ) === 0) return decodeURIComponent(c.substring(nameEQ.length, c.length));
                   }
                   return null;
                }
               //Куки нужны при формировании этого урл
                $.ajax({
                    url: 'index.php?route=common/filemanager' + '&token=' + getURLVar('token') + '&target=' + $(element).parent().find('input').attr('id') + '&thumb=' + $(element).attr('id')  + '&directory=' + readCookie('directory') + "&page=" + readCookie('page'),
    
    Кстати, js файл наглухо засел в кэше, пришлось чистить руками.

    @TODO
    1) Заменить велосипеды типа функции чтения куков на то, что уже есть в скриптах CMS
    2) Заменить костыли типа выдирания номера страницы из html на что-то более приличное
    3) Написать ocmod.xml

    Кто движок знает хорошо, может поможете? Полезный фикс ведь.
     
    Последнее редактирование: 15 янв 2016
  5. Ален

    Ален Эксперт

    Сообщения:
    2.056
    Симпатии:
    640
    Для кук пользуемся примером в том же скрипте
    Код:
    localStorage.setItem

    Я делал как то подобное, там все короче получается. Но по каким то причинам сейчас не могу найти где делал.... ((
     
    Последнее редактирование: 15 янв 2016
  6. Ravilr

    Ravilr Специалист

    Сообщения:
    3.877
    Симпатии:
    1.064
    в \admin\controller\common\filemanager.php
    например находим
    PHP:
    // Make sure we have the correct directory
    и перед ним вставим
    PHP:
         // Запоминание последней директории
         
    if (!isset($this->request->get['directory']) && !isset($this->request->get['parent']) ) {
           
    $this->request->get['directory'] = isset($this->session->data['directory_file_manager']) ? $this->session->data['directory_file_manager'] : null;
           
    $this->request->get['page'] = isset($this->session->data['page_file_manager']) ? $this->session->data['page_file_manager'] : null;
         } else {
           
    $this->session->data['directory_file_manager'] = $this->request->get['directory'];
           
    $this->session->data['page_file_manager'] = $this->request->get['page'];
         }
    и найти
    PHP:
            // Parent
            
    $url '';
    заменить на
    PHP:
            // Parent
            
    $url '&parent=parent';
    тестируем. Если все нормально, то добавим в сборку 2.2.0.1! (давно надо было добавить..)
     
    Последнее редактирование: 27 май 2016
    Merc, Designa, Bkmz и 3 другим нравится это.
  7. UserWii

    UserWii Пользователь

    Сообщения:
    111
    Симпатии:
    2
    Здорово! Еще бы сделать сортировку по дате добавления, чтобы последнее добавленное изображение было первым.
     
  8. Djon

    Djon Новичок

    Сообщения:
    19
    Симпатии:
    12
    По этим строкам собирается куча ошибок в журнале. Не подскажите, в чем дело?
     
  9. Ravilr

    Ravilr Специалист

    Сообщения:
    3.877
    Симпатии:
    1.064
    так уже по другому надо. Вот вырезка из модификатора из последней сборки.
    Устранены баги и добавлены текстовые хлебные крошки
     

    Вложения:

    RoS и Vlad нравится это.
  10. Djon

    Djon Новичок

    Сообщения:
    19
    Симпатии:
    12
    После установки окмода пошли ошибки по другим строкам. Уже даже забил на эти ошибки, работает же, да и ладно. А потом перезалил файлменеджер из голой сборки и переустановил окмод. И вуаля. Благодарю!
     
  11. Merc

    Merc Новичок

    Сообщения:
    1
    Симпатии:
    0
    На основе сделал для ОС3, спасибо!