Цей модуль надає функціонал для конвертації зображень з HTML полів у вкладення Odoo. Він може обробляти як base64-кодовані зображення, так і зовнішні URL-адреси зображень, роблячи їх доступними як вкладення Odoo та оновлюючи HTML-вміст відповідно.
Основні можливості включають:
- Автоматична конвертація зовнішніх зображень та base64-кодованих зображень у вкладення
- Налаштовувана система завдань для обробки конкретних моделей та полів
- Маркування вкладень для відстеження та керування
- Очищення невикористаних зображень-вкладень
- Підтримка як пакетної обробки, так і обробки окремих записів
Налаштування
Налаштування модуля просте:
- Перейдіть до Налаштування -> Технічне -> HTML зображення у вкладення
- Створіть нове завдання, вказавши:
- Назва: Ідентифікатор завдання
- Модель: Цільова модель, що містить HTML поля
- HTML поле: Цільове поле, що містить зображення для обробки
- Натисніть "Створити рядки" для генерації рядків обробки
- Використовуйте кнопку "Виконати" для обробки окремих рядків або "Виконати все" для пакетної обробки
Технічні деталі
Модуль складається з кількох ключових компонентів:
1. Обробка HTML зображень
Модуль обробляє два типи зображень у HTML-вмісті:
- Base64-кодовані зображення: Зображення, вбудовані безпосередньо в HTML за допомогою data URL
<img src="data:image/jpeg;base64,/9j/4AAQSkZJRg...">
- Зовнішні зображення: Зображення, на які посилаються через URL
<img src="https://example.com/image.jpg">
2. Реалізація міксину
Модуль надає клас-міксин, який може бути успадкований будь-якою моделлю, що потребує обробки зображень:
class MyModel(models.Model): _name = 'my.model' _inherit = ['kw.html.image2attachment.mixin'] description = fields.Html()
3. Автоматична обробка
Зображення автоматично обробляються під час:
- Створення запису (метод create)
- Оновлення запису (метод write)
- Пакетної обробки через систему завдань
4. Керування зображеннями
Модуль надає інструменти для:
- Конвертації зображень у вкладення Odoo
- Оновлення HTML-вмісту з URL-адресами вкладень
- Маркування вкладень для відстеження
- Очищення невикористаних вкладень
Приклади використання
1. Пряме використання моделі
Для моделей, що успадковують міксин:
# Зображення будуть автоматично оброблені record = env['my.model'].create({ 'description': '<img src="data:image/jpeg;base64,...">' }) # Оновлення вмісту з новими зображеннями record.write({ 'description': '<img src="https://example.com/image.jpg">' })
2. Використання системи завдань
Для обробки існуючих записів:
- Створіть завдання для цільової моделі та поля
- Згенеруйте рядки обробки
- Виконайте обробку:
# Обробка одного рядка task_line.action_execute() # Обробка всіх рядків task.action_execute_all()
3. Ручна обробка
Ви також можете обробляти зображення вручну:
# Отримання інструменту обробки tool = env['kw.html_image2attachment.tool'] # Обробка конкретного запису tool.process_record(record, 'description') # Очищення невикористаних зображень tool.clean_unused_images(record)
Посібник з інтеграції
1. Успадкування міксину
Щоб додати обробку зображень до вашої моделі:
# models/my_model.py from odoo import models, fields class MyModel(models.Model): _name = 'my.model' _inherit = ['mail.thread', 'kw.html.image2attachment.mixin'] name = fields.Char() description = fields.Html() # HTML поле, яке буде оброблятися other_html_field = fields.Html() # Інше HTML поле # Опціонально: Перевизначте html_fields для вказівки полів для обробки @property def html_fields(self): return ['description', 'other_html_field']
2. Міграційний скрипт
Для обробки існуючих записів під час оновлення модуля створіть міграційний скрипт:
# migrations/16.0.1.1.0/post-migrate.py from odoo import api, SUPERUSER_ID def migrate(cr, version): if not version: return env = api.Environment(cr, SUPERUSER_ID, {}) # Отримання всіх моделей, що успадковують kw.html.image2attachment.mixin IrModel = env['ir.model'] models = IrModel.search([ ('inherited_model_ids.model', '=', 'kw.html.image2attachment.mixin') ]) # Обробка кожної моделі tool = env['kw.html_image2attachment.tool'] for model in models: if not model.model in env: continue Model = env[model.model] records = Model.search([]) # Маркування вкладень для кожного запису for record in records: tool.mark_attachments(record) # Комміт після кожної моделі, щоб уникнути довгих транзакцій env.cr.commit()
3. Структура директорій
Ваш модуль повинен мати таку структуру:
my_module/ ├── __init__.py ├── __manifest__.py ├── models/ │ ├── __init__.py │ └── my_model.py └── migrations/ └── 16.0.1.1.0/ └── post-migrate.py
4. Залежності в маніфесті
Додайте залежність у маніфесті вашого модуля:
# __manifest__.py { 'name': 'My Module', 'version': '16.0.1.1.0', 'depends': [ 'base', 'kw_html_image2attachment', ], # ... }
Модуль можна скачати на маркеті за посиланням
https://apps.odoo.com/apps/modules/16.0/kw_html_image2attachment