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