4.0.0 Заметки

Тема в разделе "Инструкции и FAQ", создана пользователем Chukcha, 8 янв 2021.

  1. Chukcha

    Chukcha Специалист

    Сообщения:
    3.013
    Симпатии:
    685
    Хотим того или не хотим, но она все равно будет

    Основная цель сборки - уйти от окмодов и перенести все на события

    Т.е. в четверке нет модификаторов

    Но как писать модули

    На примере простейшего модуля

    1. install.xml - обязан быть
    Код:
    <?xml version="1.0" encoding="UTF-8"?>
    <modification>
        <name>Название</name>
        <version>4.0</version>
        <author>Автор</author>
        <link>Ссылка</link>
    </modification>
    Без него ничео не станет

    2. Структура папок
    UPLOAD
    - Admin
    - Catalog
    - System
    Нет теперь подпапки extension
    Все будет развернуто в папку модуля, или папку вашего пространства

    Еще попробую..
    Но должно сработать
    Если у вас 10500 своих модулей, то очень удобно бросать все в Свое пространство
    Ведь именно так развернуто дефолтный комплект модулей
    Пространство создается из названия файла

    Поэтому вы грузите my_name.ocmod.zip для любого мода внутри (надо пробовать)
    Файлы для установки после загрузки грузятся в storage/marketplace

    будет ли далее ocmod или ocmod4 не понятно, но тема уже поднималась

    Пока на этом все

    зы следите за namespace при написании модуля.
     
    Ravilr и Vlad нравится это.
  2. Chukcha

    Chukcha Специалист

    Сообщения:
    3.013
    Симпатии:
    685
    Что есть хорошо, что есть плохо

    Начну с плохо, или я не понял
    Доступ к своим стилям и скриптам
    Но в коде не увидел т.е. все в своих папках

    И.. тут оно же хорошо
    Никто не перепишет ваши скрипты загрузкой своих обновлений, Это касается плагинов и версий


    Плохо.. или Хорошо
    аddScript('/extension/mymodule/admin/view... и т.д.)
     
  3. Vlad

    Vlad Эксперт

    Сообщения:
    4.129
    Симпатии:
    999
    Кому как. Мне пока не очень нравится 4х :(

    Пока вижу, что система становится "сложнее". События они не всегда прозрачны, проблемы с отладкой. Свои пространства для модулей, может хорошо, но тут тоже не все так гладко., как написали выше, кто будет сравнивать подключенные скрипты?

    Держите нас в курсе :)
     
  4. Chukcha

    Chukcha Специалист

    Сообщения:
    3.013
    Симпатии:
    685
    Пока такое мое мнение

    Повышается порог вхождения
    Кому как.. но мне нравится..

    Отладка?
    Да, есть минус.. и тут же плюс..

    Вы имеете данные которые пришли и только с ними, проверил порядок применения событий
    Но!!!! бегать по окмодам, если эти окмоды разбросаны..
    Тоже не айс

    Я уже адаптировал пару своих модулей - для изучения
    Один для витрины, второй для админки

    На первом сильно обжегся, второй - почти сразу взлетел

    Сложность будет для модулей работающих с сырыми данными

    пример
    Добавить поле mpn в списки товара на витрине


    Код:
                foreach ($results as $result) {
                    if (is_file(DIR_IMAGE . html_entity_decode($result['image'], ENT_QUOTES, 'UTF-8'))) {
                        $image = $this->model_tool_image->resize(html_entity_decode($result['image'], ENT_QUOTES, 'UTF-8'), $this->config->get('theme_' . $this->config->get('config_theme') . '_image_product_width'), $this->config->get('theme_' . $this->config->get('config_theme') . '_image_product_height'));
                    } else {
                        $image = $this->model_tool_image->resize('placeholder.png', $this->config->get('theme_' . $this->config->get('config_theme') . '_image_product_width'), $this->config->get('theme_' . $this->config->get('config_theme') . '_image_product_height'));
                    }
    
                    if ($this->customer->isLogged() || !$this->config->get('config_customer_price')) {
                        $price = $this->currency->format($this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']);
                    } else {
                        $price = false;
                    }
    
                    if ((float)$result['special']) {
                        $special = $this->currency->format($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']);
                    } else {
                        $special = false;
                    }
    
                    if ($this->config->get('config_tax')) {
                        $tax = $this->currency->format((float)$result['special'] ? $result['special'] : $result['price'], $this->session->data['currency']);
                    } else {
                        $tax = false;
                    }
    
                    $product_data = [
                        'product_id'  => $result['product_id'],
                        'thumb'       => $image,
                        'name'        => $result['name'],
                        'description' => utf8_substr(trim(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8'))), 0, $this->config->get('theme_' . $this->config->get('config_theme') . '_product_description_length')) . '..',
                        'price'       => $price,
                        'special'     => $special,
                        'tax'         => $tax,
                        'minimum'     => $result['minimum'] > 0 ? $result['minimum'] : 1,
                        'rating'      => $result['rating'],
                        'href'        => $this->url->link('product/product', 'language=' . $this->config->get('config_language') . '&path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'] . $url)
                    ];
    
                    $data['products'][] = $this->load->controller('product/thumb', $product_data);
                }
    
    НУ ПОЧЕМУ!!!! он меня ограничивает этими данными???
    Неужели сложно отдать

    $data['products'][] = $this->load->controller('product/thumb', $product);

    И пусть тумба сама разбирается что ей нужно

    А тут я могу уже на сырых данных
    пользовать свои события


    (напишу issue)


    Чего мне не хватает - это событийного queryBuider

    Но тогда... модель превращается в один метод
     
    Romans нравится это.
  5. Chukcha

    Chukcha Специалист

    Сообщения:
    3.013
    Симпатии:
    685
    Наконец-то убрал либу пагинации и перенес ее в common/pagination

    Подумаешь?

    Не.. это уже очень хорошо, теперь можно делать нормальную, красивую пагинацию, со своими плюшками


    ВНИМАНИЕ!!!!
    НЕ существует!!!!
    $this->config->get('config_limit_admin'),
    Ибо нефик будки расслаблять (вот вам замена)
    $this->config->get('config_pagination')



    Эх еще бы и ХК...
     
    Последнее редактирование: 10 янв 2021
  6. Chukcha

    Chukcha Специалист

    Сообщения:
    3.013
    Симпатии:
    685
    чтоб жизнь малиной не казалась и чтоб было меньше совместимости..
    Код:
        public function link($route, $args = '', $js = false) {
            $url = $this->url . 'index.php?route=' . (string)$route;
    
    Не поняли?
    напомню


    Код:
        public function link($route, $args = '', $secure = false) {
    
    Теперь поясню..
    Ранее явно нужно было указывать протокол

    теперь третий параметр используется для валидности
    меняем & на &amp; (валидно в html, но не валидно в js)

    Это надо
    чтобы в скриптах можно было указывать
    и токен в них не тащить
    url: '{{ same_url }}'
     
  7. Chukcha

    Chukcha Специалист

    Сообщения:
    3.013
    Симпатии:
    685
    изменена версия font-awesone

    Понимаю, что беда не велика и это не проблема Даниеля

    но некоторые символы имеет другой класс