Кнопка "Применить" в админке Opencart 2

Тема в разделе "Готовые модули и модификаторы. Бесплатно", создана пользователем seregin-pro, 25 дек 2015.

  1. mars1an

    mars1an Специалист

    Сообщения:
    629
    Симпатии:
    516
  2. Vladimirych

    Vladimirych Новичок

    Сообщения:
    2
    Симпатии:
    0
    Сэньк, верю, это у меня конфликт какой то, все версии перепробовал
     
  3. UserWii

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

    Сообщения:
    111
    Симпатии:
    2
    Подскажите как сделать что бы кнопка отображалась только в редактировании товара на opencart 2.3?
     
  4. mars1an

    mars1an Специалист

    Сообщения:
    629
    Симпатии:
    516
    Код:
    <modification>
        <name>Apply Button</name>
        <code>apply_button.ocmod</code>
        <author>seregin-pro</author>
        <version>1.3</version>
        <link>http://seregin-pro.ru/</link>
        <modif>mars1an http://forum.opencart-russia.ru/members/mars1an.611/</modif>
    
        <!-- language -->
    
        <file path="admin/language/en/en-gb.php">
            <operation>
                <search><![CDATA[
                    $_['button_delete']
                ]]></search>
                <add position="before"><![CDATA[
                    $_['button_apply'] = "Apply";
                ]]></add>
            </operation>
        </file>
    
        <file path="admin/language/ru/ru-ru.php">
            <operation>
                <search><![CDATA[
                    $_['button_delete']
                ]]></search>
                <add position="before"><![CDATA[
                    $_['button_apply'] = "Применить";
                ]]></add>
            </operation>
        </file>
    
        <!-- view -->
    
        <file path="admin/view/template/catalog/product_form.tpl">
            <operation>
                <search><![CDATA[
                    <i class="fa fa-save"></i></button>
                ]]></search>
                <add position="after"><![CDATA[
                    <button onclick="$('#content #apply').attr('value', '1'); $('#' + $('#content form').attr('id')).submit();" data-toggle="tooltip" title="<?php echo $button_apply; ?>" class="btn btn-success"><i class="fa fa-check"></i></button>
                ]]></add>
            </operation>
            <operation>
                <search index="0"><![CDATA[
                    class="form-horizontal">
                ]]></search>
                <add position="after"><![CDATA[
                    <input type="hidden" name="apply" id="apply" value="0">
                ]]></add>
            </operation>
        </file>
    
        <!-- controller -->
    
        <file path="admin/controller/catalog/product.php">
            <operation>
                <search><![CDATA[$this->response->redirect($this->url->link(]]></search>
                <add position="before"><![CDATA[
                    if (isset($this->request->get['route'])) {
                        $get = explode("/", $this->request->get['route']);
                        $folder = $get[0];
                        $file = $get[1];
                        
                        if ($file == 'user_permission') {
                            $table = 'user_group';
                        } else {
                            if($folder == 'module') {
                                $table = 'module';
                            }
                            elseif($folder == 'newsblog') {
                                $table = $folder.'_'.$file;
                            } else {
                                $table = $file;
                            }
                        }
                        $this->load->model('setting/setting');
                        if ($file == 'user_permission' || $folder == 'module') {
                            $id = $this->model_setting_setting->getLastId($table, $table);
                        } else {
                            $id = $this->model_setting_setting->getLastId($table, $file);
                        }
    
                        if ($folder != 'module') {
                            if ($file == 'setting') {
                                $route = 'setting/store';
                                $editroute = 'setting/setting';
                            } else {
                                $route = $folder.'/'.$file;
                                $editroute = $folder.'/'.$file.'/edit';
                            }
                        } else {
                            $route = $folder.'/'.$file;
                            $editroute = $folder.'/'.$file;
                        }
                        
                        if (!isset($url)) $url = '';
    
                        if(($folder != 'module') && ($folder != 'newsblog')) {
                            if (($file != 'setting') && (isset($this->request->get[$table.'_id']) || isset($id))) {
                                $url .= '&'.$table.'_id='.(isset($this->request->get[$table.'_id']) ? $this->request->get[$table.'_id'] : $id);
                            }
                        }
                        elseif($folder == 'newsblog') {
                            $url .= '&'.$file.'_id='.(isset($this->request->get[$file.'_id']) ? $this->request->get[$file.'_id'] : $id);
                        }
                        else{
                            $url .= '&module_id='.(isset($this->request->get['module_id']) ? $this->request->get['module_id'] : $id);
                        }
                        if (isset($this->request->post['apply']) && $this->request->post['apply'] == '1') {
                            $this->response->redirect($this->url->link($editroute, 'token=' . $this->session->data['token'] . $url, (version_compare(VERSION, '2.2.0.0') >= 0) ? true : 'SSL'));
                        } else {
                            if($folder != 'module') {
                                $this->response->redirect($this->url->link($route, 'token=' . $this->session->data['token'] . $url, (version_compare(VERSION, '2.2.0.0') >= 0) ? true : 'SSL'));
                            }
                        }
                    }
                ]]></add>
            </operation>
            <operation>
                <search><![CDATA[$data['heading_title']]]></search>
                <add position="before"><![CDATA[$data['button_apply'] = $this->language->get('button_apply');]]></add>
            </operation>
        </file>
    
        <!-- model -->
    
        <file path="admin/model/setting/setting.php">
            <operation>
                <search><![CDATA[ModelSettingSetting extends Model {]]></search>
                <add position="after"><![CDATA[
                    public function getLastId($table, $file) {
                        $query = $this->db->query("SELECT " . $file . "_id AS id FROM " . DB_PREFIX . $table . " ORDER BY " . $file . "_id DESC LIMIT 1");
                        
                        if (isset($query->row['id'])) {
                            return $query->row['id'];
                        } else {
                            return false;
                        }
                    }
                ]]></add>
            </operation>
        </file>
    
    </modification>
     
    Maxi и Bkmz нравится это.
  5. UserWii

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

    Сообщения:
    111
    Симпатии:
    2
    спасибо за помощь)
     
  6. AlexDev

    AlexDev Новичок

    Сообщения:
    1
    Симпатии:
    0
    Установил плагин на ocpro 2.3 вроде работает.
    но перестало работать сохранение сохранение модулей:

    "У Вас нет прав для доступа к этой странице. Если она Вам нужна, обратитесь к администратору. В том случае если Вы входите в группу Администраторов отредактируйте права группы."

    Отредактировал права - выделил все, сохранил не помогло.

    Задал вопрос на оспро - вдруг проблема в движке, а не в плагине? но и на всякий случай тут тоже:

    1.vds
    2. ocpro 3. 2.3.0.2.1
    4. базовый шаблон, с моими доработками
    6. выявил причину в модуле Apply Button
    включаю модификатор
    захожу в любое расширение (выборочно пробовал новинки, html и еще какие-то), и жму редактировать. затем пытаюсь сохранить и закрыть либо применить - но выдается ошибка, что нет прав

    чтобы ошибка пропала - нужно просто выключить модификатор Apply Button и почистить кэш - все опять работает. Но не работает кнопка.

    Как сделать чтобы эта кнопка заработала? на страницах товара и настройках - она работает, а тут она выключает возможность редактирования расширений.
     
    Последнее редактирование: 13 фев 2017
  7. Vlad

    Vlad Эксперт

    Сообщения:
    4.129
    Симпатии:
    999
    на окпро не тестировалось. Вполне возможно что несовместимо.
     
  8. Chukcha

    Chukcha Специалист

    Сообщения:
    3.013
    Симпатии:
    685
    Чтобы заставить кнопку работать - нужно понимать как она работает
    А работать она может не всегда
    Я не смотрел этот мод

    Я делаю это след образом

    скриптом добавляю кнoпку apply перед Save c onclick=myfunc()

    пишу функцию
    где
    добавляю поле input value=1 name=apply
    и применяю submit к форме

    Есть один нюанс!!!
    Форм должно быть ОДИН, но не обязательно, или знать какая форма пишется.
    Если форма правильно написана то ее id="form-ROUTE"

    Затем в контроллере - проверяю POST['apply'] - и прописываю редирект на самого себя.


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

    zhenya2501 Новичок

    Сообщения:
    23
    Симпатии:
    0
  10. Chukcha

    Chukcha Специалист

    Сообщения:
    3.013
    Симпатии:
    685
    Как же я это мод ненавижу

    Этот мод генерит кучу NOT FOUND тем самым засоряя лог ошибок

    Кроме того, там есть еще один нюанс, получение last_id, если имя таблицы, не совпадает с именем формы
     
  11. Сергей1892

    Сергей1892 Новичок

    Сообщения:
    1
    Симпатии:
    0
    у меня на 2.3 работает. благодарю.
     
  12. kwakin

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

    Сообщения:
    69
    Симпатии:
    2
    Вы как опытный спец
    подскажите правильное решение
     
  13. KostyanBr

    KostyanBr Новичок

    Сообщения:
    5
    Симпатии:
    0
    На opencart.pro 2.3 так и не работает?
     
  14. k-pax

    k-pax Новичок

    Сообщения:
    1
    Симпатии:
    0
    Думал, решит ваше предложение проблемы! Всеровно, в ocstore 2.3 кнопка то появляется, работает, но появляются баги в других- модулях, например в модуле "Обратный звонок", когда в админке хочешь удалить строку с этого модуля, то вот такая ошибка.. т.е. ID в базе данных считывает как то не правильно и из-за этого баги.

    [​IMG]
     
  15. Chukcha

    Chukcha Специалист

    Сообщения:
    3.013
    Симпатии:
    685
    потому что кнопка применить должна вставляться точечно, а не массово, как это сделано в модуле.
     
  16. kwakin

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

    Сообщения:
    69
    Симпатии:
    2
    Нужна кнопка в статьях
    то что нашел под opencart 2 на ocstore 2 не работает (сама кнопка появляется но не работает )
    Может кто знает как решить
    Спасибо
     
  17. fanatic

    fanatic Продвинутый пользователь

    Сообщения:
    1.415
    Симпатии:
    239
    в контроллере метод edit находим
    PHP:
    $this->response->redirect($this->url->link('catalog/information''token=' $this->session->data['token'] . $urltrue));
    меняем на
    PHP:
                if ((int) $this->request->post['apply'] > 0) {
                    
    $url $this->url->link('catalog/information/edit''token=' $this->session->data['token'] . '&information_id=' $this->request->get['information_id'] . $urltrue);
                } else {
                    
    $url $this->url->link('catalog/information''token=' $this->session->data['token'] . $urltrue);
                }

                
    $this->response->redirect($url);
    метод getForm добавить
    PHP:
    $data['button_apply'] = $this->language->get('button_apply');
    в файле локализации добавить
    PHP:
    $_['button_apply']           = 'Применить';
    в шаблоне находим
    HTML:
    <button type="submit" form="form-information" data-toggle="tooltip" title="<?php echo $button_save; ?>" class="btn btn-primary"><i class="fa fa-save"></i></button>
    перед этим вставляем
    HTML:
               <button data-toggle="tooltip" title="<?php echo $button_apply; ?>" onclick="$('#form-information input[name=\'apply\']').val(1);
                            $('#form-information').submit();" class="btn btn-info"><i class="fa fa-save"></i></button>
     
  18. kwakin

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

    Сообщения:
    69
    Симпатии:
    2
    Спасибо
    НО
    OCSTORE 2.1 такого кода нет
    есть немного похожий
    $this->response->redirect($this->url->link('extension/module', 'token=' . $this->session->data['token'], 'SSL'));
     
  19. fanatic

    fanatic Продвинутый пользователь

    Сообщения:
    1.415
    Симпатии:
    239
    мой код для 2.3
    подправьте под 2.1
    в принципе, там не большие отличия
     
  20. kwakin

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

    Сообщения:
    69
    Симпатии:
    2
    ------------------------------------------------------------------
    я не особо силен в коде
    подправить не смогу
    Спасибо