Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

SergeTkach

Users
  • Posts

    2,304
  • Joined

  • Last visited

Everything posted by SergeTkach

  1. Аааа! Там написание текста - 500 грн, причем это будет под формат издания (скорее всего). А вот если выбрать опции, то получается немного другая сумма, чем 6600 грн: - Новость с анонсом на главной - 15 500 грн. -- но вряд ли на тему OpenCart можно написать новость - Статья с анонсом на главной - 33 000 грн Все еще желаете разместить без "складчины"?
  2. Цікава ідея. Але наразі не готовий за неї взятися. Якщо про це буде запитувати більше людей -- тоді можливо візьмуся.
  3. В файлі все добре. І тут я зрозумів, що кількість повторів помилки дуже велика. Дійсно, якщо стандартная модель категорії підключається під час імпорту, то помилки все ж таки можливі. Тоді, виходить, потрібно робити пусті элементи массива $data, який в контроллері імпорту передається в модель категорії.
  4. Модуль імпорт YML тут навряд чи має хоч якесь значення. Не вірю, що під час імпорту виникає така помилка. Вона можлива лише під час зберігання категорії при ручному редагуванні. Значить в формі категорії не прописалися згадані поля. Тобто конфлікт з якимось модулем, які також змінює форму редактування категорії. Дивиться файл storage/modification/admin/view/template/catalog/category_form.twig Там не вистачає змін, які прописані в файлі system/nice-theme-megamenu.ocmod.xml
  5. Що Ви маєте на увазі під словами "шаблон для категорії/ виробника"? Бо я не розумію, про що Ви питаєте. Так само й про "крон": який в ньому сенс?
  6. Модуль будет считать их используемыми, если это стандартное поле image. Если кастомное поле (некоторые шаблоны делают), то такое изображение попадет в неиспользуемые. Поэтому лучше всего НЕ сканировать папку catalog, а только папки, где хранятся именно фото для товаров. Видимо, по очереди.
  7. Добридень! Атрибути десь на підході, але, здається, заблукали. Тому вже не зрозуміло, коли з'являться. Обмеження хостингу -- так, під час масового редагування виконується серія фонових запитів.
  8. Модуль не задуман для чистки кеша. К тому же эта функциоя уже есть в ocStore. Хотя, на всякий случай, я запишу этот вопрос в документ, где я сортирую вопросы. Если это будет далеко не разовый вопрос, то все может быть.
  9. Нет, модуль не задевает папку image/cache. Ее содержимое можно просто удалить, нажав кпноку в админке ocStore. Ну или по ФТП (через файл менеджер хостинг-панели), если мучаетесь с чистым OpenCart. --- Потому что есть куча непредвиденных вариантов, что в ней может хранится (к примеру, изображения для дизайна, или изображения для кастомного модуля). Предусмотреть каждый такой вариант я физически не могу. Так что в случае сканирования всей папки image/catalog, будут задеты изображения, которых нет в базе данных в таблицах товаров, категорий, и стандартных модулей.
  10. Спросите разраба, с помощью каких горячих клавиши его идешки можно отформатировать код из одной строки в много строк. И пусть код покажет, а не SVG-картинки
  11. Данная версия моего модуля работает для отдельно взятого товара в админке товара. Поэтому нет, не будут прописаны. Хотя, возможно, модуль импорта XML сам создаст ЧПУ. Если же нет, да, платной версией можно массого генерировать ЧПУ, но это происходит отдельно от модуля импорта XML.
  12. Даніель стверджує, що OpenCart стає все більш популярним та наводить таку статистику існуючих сайтів на OpenCart. Цікаво, чого тоді в Google так мало запитів про OpenCart по США? Чи може власники не паряться, на чому їх сайт, а виконавці агенств знаходяться в Україні?)))
  13. Це для чого? Бо я щось не в'їхав. Правда й код орігінального файлу не дивився.
  14. Цей огляд заснований на diff найпростіших вбудованих модулів. Але все перевірено на простому власному модулі, в якому немає ані подій, ані vQmod. Основні зміни у коді стандартного модуля * Примітка Слово Opencart, виділене жовтим кольором — це код модуля (!). Але, мабуть, ви й самі здогадалися У контролері OpenCart 3 OpenCart 4 class ControllerExtensionModuleAccount extends Controller { namespace Opencart\Admin\Controller\Extension\Opencart\Module; class Account extends \Opencart\System\Engine\Controller { protected function validate() { public function save(): void { // ... $this->response->addHeader('Content-Type: application/json'); $this->response->setOutput(json_encode($json)); } private $error = array(); Більше не потрібно. Всі помилки обробляються відразу в методі save() if (isset($this->error['warning'])) { $data['error_warning'] = $this->error['warning']; } else { $data['error_warning'] = ''; } Не потрібно. Обробка помилок відбувається у методі save(). також Обробка помилок if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) { Більше не використовується. Збереження форми відбувається шляхом надсилання AJAX-запиту до методу save() $data['action'] = $this->url->link('extension/module/account', 'user_token=' . $this->session->data['user_token'], true); // 4.0.0.0 $data['save'] = $this->url->link('extension/opencart/module/account|save', 'user_token=' . $this->session->data['user_token']); // 4.0.2.0 $data['save'] = $this->url->link('extension/opencart/module/account.save', 'user_token=' . $this->session->data['user_token']); *Зміни у побудові шляхів впливають на будь-які посилання всередині модуля. Ну, це і так зрозуміло. $data['cancel'] = $this->url->link('marketplace/extension', 'user_token=' . $this->session->data['user_token'] . '&type=module', true); $data['back'] = $this->url->link('marketplace/extension', 'user_token=' . $this->session->data['user_token'] . '&type=module'); $this->load->model('extension/dashboard/map'); $this->load->model('extension/opencart/dashboard/map'); $results = $this->model_extension_dashboard_map->getTotalOrdersByCountry(); $results = $this->model_extension_opencart_dashboard_map->getTotalOrdersByCountry(); if (isset($this->request->post['module_account_status'])) { $data['module_account_status'] = $this->request->post['module_account_status']; } else { $data['module_account_status'] = $this->config->get('module_account_status'); } $data['module_account_status'] = $this->config->get('module_account_status'); У моделі OpenCart 3 OpenCart 4 class ModelExtensionDashboardMap extends Model { namespace Opencart\Admin\Model\Extension\Opencart\Dashboard; class Map extends \Opencart\System\Engine\Model { У в'юшці В OpenCart 4.0.0.0 був FontAwesome 5.15.4, а в OpenCart 4.0.2.0 FontAwesome 6.1.1. Це впливає на класи іконок. OpenCart 3 OpenCart 4 pull-right float-end data-toggle="tooltip" data-bs-toggle="tooltip" <i class="fa fa-save"></i> <!-- 4.0.0.0 --> <i class="fas fa-save"></i> <!-- 4.0.2.0 --> <i class="fa-solid fa-save"></i> {{ cancel }} {{ button_cancel }} {{ back }} {{ button_back }} <ul class="breadcrumb"> <ol class="breadcrumb"> <li><a href="{{ breadcrumb.href }}">{{ breadcrumb.text }}</a></li> <li class="breadcrumb-item"><a href="{{ breadcrumb.href }}">{{ breadcrumb.text }}</a></li> {% if error_warning %} <div class="alert alert-danger alert-dismissible"><i class="fa fa-exclamation-circle"></i> {{ error_warning }} <button type="button" class="close" data-dismiss="alert">&times;</button> </div> {% endif %}{% if error_warning %} -- (AJAX) <div class="panel panel-default"> <div class="card"> <div class="panel-heading"> <h3 class="panel-title"><i class="fa fa-pencil"></i> {{ text_edit }}</h3> </div> <!-- 4.0.0.0 --> <div class="card-header"><i class="fas fa-pencil-alt"></i> {{ text_edit }}</div> <!-- 4.0.2.0 --> <div class="card-header"><i class="fa-solid fa-pencil"></i> {{ text_edit }}</div> <div class="panel-body"> <div class="card-body"> <form action="{{ action }}" method="post" enctype="multipart/form-data" id="form-module" class="form-horizontal"> <form id="form-module" action="{{ save }}" method="post" data-oc-toggle="ajax"> * Якщо пропустити data-oc-toggle="ajax", то форма обробиться по-старому з повним завантаженням сторінки (принаймні у версії 4.0.0.0). Хоча сам .alert у bootstrap 5 трохи змінився. <div class="form-group"> <div class="row mb-3"> control-label col-form-label <select name="module_account_status" ... <!-- 4.0.2.0 --> <input type="checkbox" name="module_account_status" ... Шляхи в AJAX-запитах url: 'index.php?route=extension/module/imagescanner/getNotUsedImagesList <!-- 4.0.0.0 --> url: 'index.php?route=extension/imagescanner/module/imagescanner|getNotUsedImagesList <!-- 4.0.2.0 --> url: 'index.php?route=extension/imagescanner/module/imagescanner.getNotUsedImagesList Шляхи до зображень var img_loader = new Image().src='view/image/imagescanner-loader.gif'; var img_loader = new Image().src='extension/imagescanner/admin/view/image/imagescanner-loader.gif'; А воно запитує: http://opencart-4000.loc/admin/extension/imagescanner/admin/view/image/imagescanner-loader.gif Значить треба вказати повний шлях до файлу var img_loader = new Image().src='{{ constant('HTTP_CATALOG') }}extension/imagescanner/admin/view/image/imagescanner-loader.gif'; Обробка помилок Щоб поля з помилками підсвічувалися і до них були пояснювальні підписи, першою дією у в'юшці необхідно вписати порожні контейнери для текстів помилок. <div id="error-field" class="invalid-feedback"></div> Далі, при обробці форми по AJAX можна отримати наступний формат відповіді: { "error": { "name_1": "Product Name must be greater than 1 and less than 255 characters!", "keyword_0_1": "SEO URL keyword required!", "warning": "Warning: Please check the form carefully for errors!" } } Потім воно буде універсально оброблено в admin/view/javascript/common.js з урахуванням того, чи це рядок, чи це об'єкт, та чи є там редірект. Також воно автоматично переведе under_score індекси массиву з помилками в kebab-case html-ідентифікаторів, в яких потрібно показати відповідні тексти червоним кольором. TypeError: Cannot access offset of type string on string in при обробці помилок У js при обробці відповіді AJAX-запиту робиться розмежування між отриманим рядком та об'єктом. Все тому, що в найпростішому "модулі" (наприклад, account) в помилки потрапляє лише рядок з текстом без зайвих проблем. І ось я скопіпастив звідти, а потім побачив, що в товарах йде інакше, і скопіпастив шматок коду ще й звідти. У результаті напоровся на помилку: TypeError: Cannot access offset of type string on string in ... $json['error'] = $this->language->get('error_text'); // В найпростішому модулі присвоюється рядок ... if (isset($json['error']) && !isset($json['error']['warning'])) { $json['error']['warning'] = $this->language->get('error_warning'); // Намагається рядку присвоїти індекс масиву, але це ж PHP 8... } Власні бібліотеки у складі модуля Якщо ваш модуль використовує бібліотеку, яка зазвичай завантажувалася в system/library, то зараз при розпакуванні архіву вона потрапить до extnension/modulecode/system/library/ . OpenCart автоматично створює простори імен, як для контролерів з моделями, так і для бібілотек: // 4.0.0.0 [Opencart\Admin\Controller\Extension\Imagescanner] => Array ( [directory] => .../opencart-4000.loc/extension/imagescanner/admin/controller/ [psr4] => ) [Opencart\Admin\Model\Extension\Imagescanner] => Array ( [directory] => .../opencart-4000.loc/extension/imagescanner/admin/model/ [psr4] => ) [Opencart\System\Extension\Imagescanner] => Array ( [directory] => .../opencart-4000.loc/extension/imagescanner/system/ [psr4] => ) // 4.0.2.0 [Opencart\System\Library\Extension\Imagescanner] => Array ( [directory] => .../opencart-4021.loc/extension/imagescanner/system/library/ [psr4] => ) Зверніть увагу, що варіант іменування класу бібліотеки ImageScanner при підключенні перетвориться на image_scanner.php (system/engine/autoloader.php). Тоді як Imagescanner відповідатиме imagescanner.php. Це при тому, що в контролері назва класу в стилі CamelCase працює ок. А чому так — це вже окрема історія. У файлі бібліотеки Задамо простір імен: // 4.0.0.0 namespace Opencart\System\Extension\Modulecode\Library; // 4.0.2.0 namespace Opencart\System\Library\Extension\Imagescanner; Називаємо клас: class Yourclassname { У файлі контролера Створюємо екземпляр класу бібліотеки у нашому контролері: // 4.0.0.0 $this->instance = new \Opencart\System\Extension\Modulecode\Library\Yourclassname(); // 4.0.2.0 $this->stdelog = new \Opencart\System\Library\Extension\Imagescanner\Stdelog('imagescanner'); З іншого боку чудово відпрацює і по-старому, і ще й ніяких приколів зі змінами в системі: require_once DIR_EXTENSION . 'modulecode/system/library/modulecode.php'; $this->instance = new Yourclassname(); // и не паритися Папка модуля На прикладі присутньої в системі папки extension/opencart (де складені всі дефолтні модулі) здавалося, що OpenCart 4 з'явилося поняття "папка постачальника". Але потім з'ясувалося, що при спробі встановити в ту ж папку інший свій модуль, воно не працює До речі, якщо в інсталяційному архіві будуть нестандартні шляхи до файлів (я, наприклад, пробував modulecode/library/file.php на 4.0.0.0), то при видаленні модуля з адмінки папка модуля не видаляється, хоча всі стандартні файли та папки звідти видалені. Тобто це може створити проблеми при оновленні модуля, адже в існуючу папку модуля установник не хоче записувати. І ще з цією папкою є один приємний момент: щоб упакувати модуль, досить просто скопіювати папку та заархівувати. Більше не потрібно ритися в папках і копіювати кожен файл окремо. P.S. На преший погляд, адаптація модуль під OpenCart 4 має бути досить простою. Я цю статтю довше писав, ніж адаптував модуль. Але огляд поки що не повний. Дописуватиму згодом. Також буду додавати в текст статті зауваження з коментарів. --
  15. Увага! Не скануйте всю папку catalog! Розглянемо 3 різні ситуації, як можуть зберігатися фото товарів на вашому сайті. Випадок 1 Їдеальна ситуація. Всі фото товарів поміщуються в окрему папку. Випадок 2 Ситуація ускладнена тим, що в корньовій папці зображень розміщено все підряд: і фотки товарів, і слайдерів, і статтей. Але добре, що фото товарів хоча б мають окремі папки, які названі по імені категорії. В такому разі скануємо кожну папку з категорією товару окрему по черзі. Випадок 3 На сайті наче є папка з товарами. Але якщо придивитися, то їх там 2. Або може бути й 3 (ще є папка tovary, але її перекрила рамка із текстом). В принципі це майже Випадок 2. Тобто по черзі скануємо кожну папку, де є товари.
  16. Завантажити / Придбати розширення На чай Угостите разработчика рюмкой чаю! Хороший крепкий напиток дарит душевное тепло и заряжает разработчика энергией, которая так необходима, чтобы он вновь смог вкладываеть ее в написание кода. Если вам стало приятно, что вы получили решение своей задачи или подсказку, сделайте приятно в ответ, чтобы круговорт приятного и полезного в природе не заканчивался. Автор SergeTkach долучення 12.06.23 Категорія Інші розширення Системные требования Метод активации Без активации Ioncube Loader Нет ocStore 3.0 2.3.0.2.4 2.3 OpenCart.Pro, ocShop Звернення до сервера розробника Нет  
  17. SergeTkach

    На чай

    Version 1.0.0

    31 downloads

    Угостите разработчика рюмкой чаю! Хороший крепкий напиток дарит душевное тепло и заряжает разработчика энергией, которая так необходима, чтобы он вновь смог вкладываеть ее в написание кода. Если вам стало приятно, что вы получили решение своей задачи или подсказку, сделайте приятно в ответ, чтобы круговорт приятного и полезного в природе не заканчивался.
    Free
  18. А дійсно, по ленду з котлами телефонують на ремонт, чи на обслуговування?) Бо чищення можуть гуглити реально на тему, як самому почистити.
  19. Червона линия -- це орієнтовна лінія уваги на сторінці. На першому сайті в області увагі крупна помітна кнопка з номером, далі гарна картина та крупний заголовок. В нижній частині лінії уваги ще раз кнопка. Причому колір теплого спекрту, які вважається більш помітним. На другому ленді кнопка не має акцентованого кольору - вона зливається з менюшкою. Контакти в зоні уваги не дуже помітні. Заголовок зверху дуже мілкий "Профілактична чистка мийка та ТО кондиціонерів. Антибактеріальна обробка. Діагностика та технічне обслуговування. Гарантія на виконані роботи." А чисто власне враження, що на ленді ти наче дивися на загальну картину і вона одна цілістна. А на другому сайті 2 картинки, які не дають уяву про гарний результат. Можливо там була би фотка кімнати, де люди у спецодягу роблять чистку. А ці ж фото виглядають, як фото з сайту "зроби сам". Та щей дві. На яку потрібно дивитися? Яхщо це було б "До та Після" з однакового ракурсу, то може я би зрозумів. А так я не розумію
×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.