Конвертація HTML зображень у вкладення

Цей модуль надає функціонал для конвертації зображень з 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

Конвертація HTML зображень у вкладення
KitWorks, Volodymyr Karabanov 13 січня 2025 р.
Поділитися цією публікацією
Теги
Архів