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

Цей модуль надає функціонал для конвертації зображень з HTML полів у вкладення Odoo. Він може обробляти як base64-кодовані зображення, так і зовнішні URL-адреси зображень, роблячи їх доступними як вкладення Odoo та оновлюючи HTML-вміст відповідно.

Основні можливості включають:

  • Автоматична конвертація зовнішніх зображень та base64-кодованих зображень у вкладення
  • Налаштовувана система завдань для обробки конкретних моделей та полів
  • Маркування вкладень для відстеження та керування
  • Очищення невикористаних зображень-вкладень
  • Підтримка як пакетної обробки, так і обробки окремих записів

Налаштування

Налаштування модуля просте:

  1. Перейдіть до Налаштування -> Технічне -> HTML зображення у вкладення
  2. Створіть нове завдання, вказавши:
    • Назва: Ідентифікатор завдання
    • Модель: Цільова модель, що містить HTML поля
    • HTML поле: Цільове поле, що містить зображення для обробки
  3. Натисніть "Створити рядки" для генерації рядків обробки
  4. Використовуйте кнопку "Виконати" для обробки окремих рядків або "Виконати все" для пакетної обробки

Технічні деталі

Модуль складається з кількох ключових компонентів:

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. Використання системи завдань

Для обробки існуючих записів:

  1. Створіть завдання для цільової моделі та поля
  2. Згенеруйте рядки обробки
  3. Виконайте обробку:
    # Обробка одного рядка
    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 р.
Поділитися цією публікацією
Теги
Архів
Модулі якими треба починати