Skip to Content

HTML Field στο Odoo: Οδηγός Πλήρους Χρήσης

Ο απόλυτος οδηγός για το πεδίο Html στο μοντέλο δεδομένων του Odoo — από τις βασικές λειτουργίες μέχρι τις προσαρμογές για προχωρημένους
6 Μαρτίου 2026 από
HTML Field στο Odoo: Οδηγός Πλήρους Χρήσης
Dasolo
| No comments yet

Εισαγωγή


Όταν ανοίγετε τη σελίδα προϊόντος σε ένα κατάστημα Odoo, το κείμενο με έντονους τίτλους, σημεία κουκκίδων και ενσωματωμένες εικόνες προέρχεται από έναν συγκεκριμένο τύπο πεδίου: το Html. Πρόκειται για ένα από τα πιο ευέλικτα πεδία στο μοντέλο δεδομένων του Odoo και εμφανίζεται σε πολλές περιοχές —συχνά χωρίς να το αντιλαμβάνονται οι χρήστες— δίνοντας πλούσια μορφοποίηση σε περιγραφές, σημειώσεις και πρότυπα.


Σε αντίθεση με ένα απλό πεδίο κειμένου που αποθηκεύει απλές συμβολοσειρές, το Html πεδίο αποθηκεύει πλούσιο περιεχόμενο με μορφοποίηση. Αυτό το κάνει απαραίτητο όπου χρειάζεται δομημένο ή στιλιζαρισμένο κείμενο —π.χ. περιγραφές προϊόντων, σώματα email, εσωτερικές σημειώσεις ή τμήματα ιστοσελίδας— ώστε το αποτέλεσμα να εμφανίζεται σωστά στους πελάτες και στους χρήστες.


Αυτός ο οδηγός εξηγεί τι ακριβώς είναι το Html πεδίο στο Odoo, πώς αποθηκεύεται και καθαρίζεται από το σύστημα, που συναντάται σε πραγματικές ροές εργασίας, και πώς μπορείτε να το προσθέσετε ή να το παραμετροποιήσετε με Odoo Studio ή με κώδικα Python. Τέλος, θα αναφέρουμε τα πιο συνηθισμένα λάθη και πώς να τα αποφύγετε.

Τι είναι το πεδίο Html στο Odoo


Στον ORM του Odoo, το Html πεδίο προορίζεται για αποθήκευση μορφοποιημένου HTML. Στη βάση δεδομένων PostgreSQL αντιστοιχίζεται σε στήλη τύπου TEXT και το αποθηκευμένο περιεχόμενο είναι μια HTML συμβολοσειρά. Το Odoo αναλαμβάνει την απόδοση και την «καθαριότητα» (sanitization), οπότε οι χρήστες βλέπουν έναν πλούσιο επεξεργαστή κειμένου και όχι ωμό HTML.


Από τη σκοπιά του χρήστη, το Html εμφανίζεται ως WYSIWYG επεξεργαστής —δηλαδή βλέπετε το αποτέλεσμα όπως θα εμφανιστεί. Οι χρήστες μπορούν να εφαρμόσουν έντονα, πλάγια, επικεφαλίδες, λίστες, συνδέσμους, πίνακες και να εισαγάγουν εικόνες. Πίσω από το περιβάλλον, ό,τι δημιουργούν αποθηκεύεται ως δομημένο HTML.


Παρακάτω βλέπετε ένα παράδειγμα ορισμού του πεδίου σε Python για ένα μοντέλο:

from odoo import fields, models

class ProductTemplate(models.Model):
    _inherit = 'product.template'

    x_technical_specs = fields.Html(
        string='Technical Specifications',
        sanitize=True,
        sanitize_tags=True,
    )

Η παράμετρος string ορίζει την ετικέτα που θα βλέπει ο χρήστης. Η παράμετρος sanitize καθορίζει αν το Odoo θα αφαιρεί επικίνδυνα στοιχεία HTML πριν αποθηκεύσει —μια ρύθμιση κρίσιμη για την ασφάλεια και ενεργή από προεπιλογή.


Στο Odoo Studio το πεδίο ονομάζεται Html ή Rich Text και όταν το δημιουργείτε μέσω Studio παίρνει προθέμα x_studio_. Αν ορίζεται με Python ή μέσω API, επιλέγετε τεχνικά όνομα εσείς.

Πώς λειτουργεί το πεδίο


Όταν ορίζετε ένα Html πεδίο, το πλαίσιο δημιουργεί μια στήλη TEXT στο PostgreSQL χωρίς όριο μήκους, οπότε είναι κατάλληλο για μεγάλου μήκους περιεχόμενο. Το Odoo εφαρμόζει τα φίλτρα καθαρισμού πριν γράψει τιμές στη βάση.


Καθαρισμός και Ασφάλεια

Το πιο χαρακτηριστικό στοιχείο του Html πεδίου είναι ο μηχανισμός καθαρισμού. Από προεπιλογή, το Odoo αφαιρεί tags και attributes που μπορούν να χρησιμοποιηθούν για XSS επιθέσεις. Ο τρόπος λειτουργίας ελέγχεται από μια σειρά ιδιοτήτων πεδίου.

  • sanitize: Όταν είναι True (προεπιλογή), το Odoo εκτελεί πλήρη διαδικασία καθαρισμού πριν αποθηκεύσει. Απενεργοποιήστε το μόνο αν το περιεχόμενο προέρχεται από απόλυτα αξιόπιστη πηγή και πρέπει να διατηρηθεί το ωμό HTML.
  • sanitize_tags: Όταν είναι True, το Odoo αφαιρεί tags που δεν βρίσκονται στη λίστα επιτρεπόμενων. Η απενεργοποίηση επιτρέπει αυθαίρετα tags, αλλά πρέπει να γίνεται με προσοχή.
  • sanitize_attributes: Ελέγχει αν θα καθαριστούν και τα attributes μέσα στα HTML tags.
  • sanitize_style: Ελέγχει τον καθαρισμό των inline style attributes. Ορισμένες CSS ιδιότητες επιτρέπονται, ενώ άλλες που θεωρούνται επικίνδυνες αφαιρούνται.
  • strip_style: Αν True, αφαιρούνται εντελώς τα inline style attributes.
  • strip_classes: Αν True, αφαιρούνται όλες οι CSS κλάσεις από το αποθηκευμένο περιεχόμενο.

Ο καθαρισμός αυτός καθιστά το Html πεδίο ασφαλές για περιεχόμενο που δημιουργούν χρήστες —γι’ αυτό χρησιμοποιείται συχνά σε φόρμες πελατών και πρότυπα email μέσα στο Odoo.


Βασικές ιδιότητες πεδίου

Πέρα από τον καθαρισμό, το Html πεδίο μοιράζεται πολλές τυπικές ιδιότητες των πεδίων στο Odoo.


  • translate: Όταν είναι True, το περιεχόμενο μπορεί να μεταφραστεί ανά γλώσσα. Το Odoo αποθηκεύει ξεχωριστές εκδοχές HTML για κάθε ενεργή γλώσσα.
  • required: Κάνει το πεδίο υποχρεωτικό. Προσοχή: ένα Html πεδίο που περιέχει μόνο κενά ή άδεια tags μπορεί να εμφανίζεται ως μη-κενό στην διεπαφή, οπότε ο έλεγχος υποχρεωτικότητας λειτουργεί καλύτερα όταν το περιεχόμενο είναι πραγματικά άδειο.
  • default: Ορίζει προεπιλεγμένο HTML για νέες εγγραφές —χρήσιμο για προκαθορισμένα πρότυπα email ή περιγραφές προϊόντων.
  • compute: Συνδέει μια Python μέθοδο που δημιουργεί δυναμικά το HTML. Με store=True το αποτέλεσμα αποθηκεύεται στη βάση.
  • copy: Ελέγχει αν το HTML αντιγράφεται όταν γίνεται duplicate μια εγγραφή. Προκαθορισμένα είναι True.

Πώς εμφανίζεται σε προβολές

Σε φόρμες, το Html πεδίο εμφανίζεται ως πλούσιος επεξεργαστής με toolbar για μορφοποίηση και χώρο που δέχεται εικόνες και συνδέσμους. Σε λίστες, συνήθως εμφανίζεται μια προεπισκόπηση με τα HTML tags αφαιρεμένα, ώστε η λίστα να παραμένει ευανάγνωστη.


Το widget στο XML σας επιτρέπει να ελέγξετε την απόδοση. Η προεπιλεγμένη απεικόνιση είναι ο επεξεργαστής πλούσιου κειμένου. Εναλλακτικά, μπορείτε να εμφανίσετε το περιεχόμενο ως read-only HTML με το widget html —χρήσιμο όταν θέλετε να δείξετε μορφοποιημένο περιεχόμενο χωρίς εργαλεία επεξεργασίας, π.χ. σε portal σελίδες ή αναφορές.


Αλληλεπίδραση με τον ORM του Odoo

Αναγνώριση και εγγραφή στο ORM δουλεύουν με HTML συμβολοσειρές: όταν διαβάζετε παίρνετε ωμό HTML ως string, και όταν γράφετε περιμένετε επίσης μια HTML συμβολοσειρά. Ο καθαρισμός γίνεται στο επίπεδο του ORM πριν η εγγραφή φτάσει στη βάση, επομένως και οι κλήσεις μέσω XML-RPC περνούν από τα ίδια φίλτρα όταν sanitize=True.


Πρακτική συνέπεια: αν πρέπει να αποθηκεύσετε προσαρμοσμένα tags ή attributes που δεν επιτρέπονται από το Odoo, θα χρειαστεί να θέσετε sanitize=False ή να αλλάξετε τις σημαίες καθαρισμού. Πρόκειται για προχωρημένη επιλογή που απαιτεί σχολαστική εκτίμηση των κινδύνων ασφάλειας.

Περιστατικά χρήσης στην επιχείρηση


Το Html πεδίο εμφανίζεται σε πολλές περιοχές μιας εγκατάστασης Odoo. Παρακάτω ακολουθούν πέντε συνηθισμένα παραδείγματα από πραγματικές ροές εργασίας.


Αποθήκη και Ηλεκτρονικό Εμπόριο: Περιγραφές προϊόντων

Το πιο διαδεδομένο Html πεδίο είναι το description_sale στο product.template —η περιγραφή που βλέπει ο πελάτης στο ηλεκτρονικό κατάστημα και στις γραμμές παραγγελίας. Η χρήση Html επιτρέπει στις ομάδες merchandising να γράφουν δομημένο περιεχόμενο με κουκκίδες, επικεφαλίδες και εικόνες, στοιχεία που βελτιώνουν τη μετατροπή σε e‑commerce. Η ίδια εγγραφή προϊόντος τροφοδοτεί τόσο το back-office όσο και το storefront, χωρίς ανάγκη διπλής εισαγωγής περιεχομένου.


Email Marketing: Σώματα προτύπων

Τα πρότυπα email στο Odoo βασίζονται σε Html πεδία. Το body_html στο mail.template αποθηκεύει ολόκληρο το σώμα του email ως HTML, συμπεριλαμβανομένων layout, εικόνων και δυναμικών placeholders που αντικαθίστανται κατά την αποστολή. Οι ομάδες μάρκετινγκ μπορούν να δημιουργούν πλούσια email μέσα στο Odoo χωρίς εξωτερικά εργαλεία, με δυνατότητα επαναχρησιμοποίησης και έκδοσης σε καμπάνιες.


CRM: Σημειώσεις και περιγραφές ευκαιριών

Οι ομάδες πωλήσεων χρειάζονται συχνά να καταγράφουν λεπτομέρειες για έναν υποψήφιο ή μια συμφωνία. Html πεδία στα leads και opportunities επιτρέπουν δομημένες σημειώσεις με μορφοποίηση, λίστες και συνδέσμους προς έγγραφα. Αυτό είναι πολύ πιο χρήσιμο από απλό κείμενο όταν οι σημειώσεις μοιράζονται στην ομάδα ή περιλαμβάνονται σε εκτυπώσεις, καθώς η μορφοποίηση διατηρείται.


Λογιστήριο: Όροι σε τιμολόγια

Πολλές εταιρείες βάζουν όρους πληρωμής, νομικές ρήτρες ή εγγυήσεις στο τέλος των τιμολογίων και των παραγγελιών. Το note πεδίο σε sales orders και invoices είναι Html, επιτρέποντας στην οικονομική ομάδα να μορφοποιεί σωστά τους όρους. Το περιεχόμενο απεικονίζεται καθαρά σε PDF εκτυπώσεις, με σωστές αλλαγές γραμμής και έμφαση.


HR: Περιγραφές θέσεων εργασίας

Στην πρόσληψη μέσω Odoo Recruitment, οι περιγραφές θέσεων αποθηκεύονται σε Html πεδίο στα hr.job και hr.applicant. Αυτό επιτρέπει ξεκάθαρα δομημένες αγγελίες με ενότητες για ευθύνες, απαιτήσεις και παροχές —το είδος περιεχομένου που προσελκύει κατάλληλους υποψηφίους όταν δημοσιεύεται στη σελίδα καριέρας.

Δημιουργία ή παραμετροποίηση του Html πεδίου


Υπάρχουν τρεις βασικοί τρόποι για να προσθέσετε ένα Html πεδίο σε μοντέλο Odoo, ανάλογα με τις τεχνικές ανάγκες και τον τρόπο ανάπτυξης.


Χρήση Odoo Studio (χωρίς κώδικα)

Το Odoo Studio διευκολύνει την προσθήκη Html πεδίου σε οποιαδήποτε φόρμα χωρίς να γράψετε κώδικα.

  1. Ανοίξτε το Odoo Studio από το κύριο μενού.
  2. Πλοηγηθείτε στη φόρμα όπου θέλετε το πεδίο.
  3. Από το πλαϊνό μενού σύρετε ένα Html ή Rich Text πεδίο στη φόρμα.
  4. Ορίστε ετικέτα και επιλογές στο πάνελ ιδιοτήτων του πεδίου.
  5. Αποθηκεύστε και κλείστε το Studio.

Το Studio δημιουργεί αυτόματα το πεδίο με το προθέμα x_studio_, το προσθέτει στη θέα και δημιουργεί τη στήλη στη βάση. Δεν χρειάζεται ξεχωριστή μετανάστευση ή deploy —το πεδίο είναι άμεσα διαθέσιμο σε όλο το σύστημα.


Χρήση Python σε προσαρμοσμένο module

Για προγραμματιστές που φτιάχνουν modules, ο ορισμός Html πεδίων γίνεται σε Python αρχεία μοντέλων. Αυτή η μέθοδος είναι ιδανική όταν χρειάζεται version control και προώθηση αλλαγών από staging σε production.


from odoo import fields, models

class SaleOrder(models.Model):
    _inherit = 'sale.order'

    x_delivery_instructions = fields.Html(
        string='Delivery Instructions',
        sanitize=True,
        translate=True,
    )

Μετά τον ορισμό, προσθέστε το πεδίο στη σχετική view XML ώστε να εμφανιστεί στη διεπαφή. Το Odoo δημιουργεί τη στήλη TEXT κατά την εγκατάσταση/αναβάθμιση του module και το πεδίο αποδίδεται αυτόματα ως rich text editor στη φόρμα.


Χρήση XML-RPC API

Αν διαχειρίζεστε προσαρμογές προγραμματιστικά ή μέσω αυτοματισμών, μπορείτε να δημιουργήσετε Html πεδία μέσω XML-RPC API.

field_id = models.execute_kw(
    ODOO_DB, uid, ODOO_API_KEY,
    'ir.model.fields', 'create',
    [{
        'name': 'x_custom_notes',
        'field_description': 'Custom Notes',
        'model_id': model_id,
        'ttype': 'html',
        'state': 'manual',
    }]
)

Η τιμή ttype: 'html' ζητά τη δημιουργία Html πεδίου. Το state: 'manual' σημειώνει ότι πρόκειται για πεδίο που δημιούργησε ο χρήστης και όχι module. Αυτή η προσέγγιση χρησιμοποιείται συχνά σε αυτοματοποιημένα σενάρια διαμόρφωσης περιβάλλοντος.


Σημείωση: Οι επιλογές sanitization (sanitize, sanitize_tags κ.λπ.) δεν ρυθμίζονται με τον ίδιο τρόπο μέσω του ir.model.fields API όπως σε Python —ισχύει η προεπιλεγμένη συμπεριφορά καθαρισμού για πεδία που δημιουργούνται μέσω API.

Καλές πρακτικές


1. Κρατήστε ενεργό το sanitize εκτός αν υπάρχει σοβαρός λόγος

Η προεπιλεγμένη λειτουργία καθαρισμού προστατεύει το σύστημα από XSS επιθέσεις. Οι περισσότερες περιπτώσεις λειτουργούν σωστά με το sanitize ενεργό. Απενεργοποιήστε το μόνο όταν το περιεχόμενο προέρχεται από πλήρως αξιόπιστη, ελεγχόμενη διαδικασία και ποτέ για περιεχόμενο χρηστών ή εξωτερικών πηγών.


2. Ορίστε translate=True για πολυγλωσσικό περιεχόμενο προϊόντων

Αν το περιβάλλον σας έχει πολλαπλές γλώσσες, τα Html πεδία που εμφανίζονται στη ιστοσελίδα ή σε πελατειακά έγγραφα πρέπει να έχουν translate=True. Έτσι μπορείτε να διατηρείτε ξεχωριστό HTML για κάθε γλώσσα και οι πελάτες θα βλέπουν περιεχόμενο στη δική τους γλώσσα.


3. Αποφύγετε περιεχόμενο που εξαρτάται από εξωτερικούς πόρους

Η ενσωμάτωση εξωτερικών εικόνων ή scripts μέσα σε Html πεδία δημιουργεί εξαρτήσεις που μπορεί να σπάσουν αν τα URLs αλλάξουν ή χαθούν. Χρησιμοποιήστε το σύστημα επισυνάψεων του Odoo για να φιλοξενήσετε εικόνες εσωτερικά και αναφέρετέ τες με σχετικές διαδρομές για αξιοπιστία κατά τις μεταφορές βάσης και τις αλλαγές server.


4. Χρησιμοποιήστε υπολογιζόμενα Html πεδία για δυναμικό περιεχόμενο

Για περιεχόμενο που παράγεται προγραμματιστικά —π.χ. μορφοποιημένες συγκεντρωτικές πληροφορίες παραγγελιών ή δυναμικές ρήτρες εγγύησης— ένα compute Html πεδίο με store=True είναι καθαρή λύση: ο κώδικας συγκεντρώνει το HTML σε ένα σημείο, το αποτέλεσμα αποθηκεύεται για γρήγορη ανάγνωση και αποδίδεται σωστά στη διεπαφή και σε PDF.


5. Σκεφτείτε το πλαίσιο απόδοσης πριν επιλέξετε Html ή Text

Αν το περιεχόμενο θα εμφανίζεται μόνο ως απλό κείμενο στο backend, ένα Text πεδίο ίσως αρκεί. Χρησιμοποιήστε Html όταν η μορφοποίηση έχει σημασία για τον αναγνώστη —σε ιστοσελίδες, εκτυπώσιμα έγγραφα ή email. Προσθήκη Html εκεί που θα έφθανε ένα Text προσθέτει περιπλοκότητα σε χρήστες που απλώς χρειάζονται ένα απλό σημείωμα.

Συνηθισμένα λάθη


Απενεργοποίηση sanitize και παραμέληση

Το να θέσετε sanitize=False σε πεδίο που επεξεργάζονται χρήστες είναι κίνδυνος ασφάλειας. Συμβαίνει συχνά κατά την ανάπτυξη για να ξεπεραστεί ένα πρόβλημα μορφοποίησης και να ξεχαστεί πριν το production. Καταγράψτε πάντα γιατί απενεργοποιήθηκε και προγραμματίστε επανεξέταση πριν την παραγωγική χρήση.


Επικόλληση περιεχομένου από εξωτερικές πηγές με «χαλασμένο» HTML

Η επικόλληση από Word, Google Docs ή ιστοσελίδες συχνά φέρνει ακατάστατο ή μη-τυπικό HTML. Αυτό μπορεί να προκαλέσει διαφορετική απόδοση, αόρατους χαρακτήρες που χαλάνε αναζητήσεις ή υπερμεγεθεις τιμές πεδίου που επιβραδύνουν τη φόρτωση. Ενθαρρύνετε τους χρήστες να χρησιμοποιούν πρώτα «επικόλληση ως απλό κείμενο» και μετά να εφαρμόζουν ξανά μορφοποίηση στον editor του Odoo.


Σύγχυση μεταξύ Html πεδίου και περιεχομένου website builder

Ο website builder του Odoo χρησιμοποιεί blocks και Owl components για τη σύνθεση σελίδων. Το HTML που αποθηκεύει ο website builder δεν είναι το ίδιο με αυτό που εισάγετε σε ένα απλό Html πεδίο μοντέλου. Η αντιγραφή πολύπλοκου HTML από τον website builder σε Html πεδίο συχνά δεν αποδίδει σωστά και μπορεί να αφαιρεθεί από τον καθαρισμό.


Ξέχασμα του translate σε πολυγλωσσικές εγκαταστάσεις

Σε πολυγλωσσικό περιβάλλον, ένα Html πεδίο χωρίς translate=True εμφανίζει το ίδιο περιεχόμενο σε όλους τους χρήστες. Αυτό είναι πρόβλημα για προϊόντα, πρότυπα email και οτιδήποτε φτάνει σε εξωτερικούς χρήστες. Είναι εύκολο να το παραβλέψετε στην αρχική ρύθμιση και δύσκολο να το διορθώσετε μετά την εισαγωγή περιεχομένου σε μία μόνο γλώσσα.


Χρήση Html εκεί που περιμένουν απλό κείμενο

Some parts of Odoo, such as email subjects, report titles, or external API responses, expect plain text strings. If you store an Html field value in a context where the HTML tags are not stripped, your users will see raw markup like <p>Hello</p> instead of clean text. Always check how and where the field value will be consumed before choosing Html over Char or Text.

Συμπέρασμα


Το Html πεδίο είναι από τα πιο δυνατά τύπους πεδίων στο μοντέλο δεδομένων του Odoo. Δουλεύει στο παρασκήνιο για περιγραφές προϊόντων, πρότυπα email, αγγελίες θέσεων και σημειώσεις τιμολογίων, επιτρέποντας μορφοποιημένο περιεχόμενο σε όλο το σύστημα χωρίς επιπλέον εργαλεία.


Κατανοώντας πώς λειτουργεί —ιδιαίτερα τον μηχανισμό καθαρισμού, την υποστήριξη μεταφράσεων και τη συμπεριφορά του σε διαφορετικά περιβάλλοντα απόδοσης— θα πάρετε καλύτερες αποφάσεις κατά το σχεδιασμό ή την παραμετροποίηση ενός Odoo συστήματος. Είτε προσθέτετε πεδίο με Studio, είτε το ορίζετε σε Python, είτε το δημιουργείτε απομακρυσμένα μέσω API, οι αρχές που περιγράφονται εδώ ισχύουν σε όλες τις προσεγγίσεις.


Όπως με πολλά στο Odoo, το ίδιο το πεδίο είναι απλό όταν καταλάβετε τι γίνεται «πίσω από τη σκηνή». Η αξία βρίσκεται στο να το χρησιμοποιήσετε στα σωστά σημεία, με τις κατάλληλες ρυθμίσεις, για τον σωστό τύπο περιεχομένου.

Στην ομάδα μας στη Dasolo βοηθάμε εταιρείες να σχεδιάσουν, προσαρμόσουν και βελτιστοποιήσουν το Odoo σε όλες τις λειτουργίες. Είτε χρειάζεστε βοήθεια με καθαρό data model, με προσθήκη προσαρμοσμένων πεδίων στις ροές εργασίας σας ή με την ανάπτυξη πλήρων modules, μπορούμε να αναλάβουμε το έργο. Επικοινωνήστε μαζί μας και να συζητήσουμε το Odoo project σας.

HTML Field στο Odoo: Οδηγός Πλήρους Χρήσης
Dasolo 6 Μαρτίου 2026
Share this post
Σύνδεση to leave a comment