Сторінки¶
Використайте наступний код, щоб додати опцію для вашого нового власного мега-меню у Конструкторі веб-сайтів.
Сторінки за замовчуванням¶
В Odoo вебсайти мають кілька статичних сторінок за замовчуванням (Головна, Контакти, 404 тощо). Вони побудовані наступним чином.
/website/data/website_data.xml
¶<template id="website.homepage" name="Home">
<t t-call="website.layout">
<t t-set="pageName" t-value="'homepage'"/>
<div id="wrap" class="oe_structure oe_empty" />
</t>
</template>
Кожна сторінка за замовчуванням — це шаблон із власним вмістом, збереженим у записі. Саме тому користувацькі сторінки створюються в записі.
<t -call='website.layout'>
має деякі змінні, які можна встановити:
Визначте мета-заголовок.
<t t-set="additional_title">My Page Title</t>
Порада
Тут t-set
не передає значення в атрибут t-value
або t-valuef
. Це для цілей перекладу. Вміст t-value
або t-valuef
явно не експортується для перекладу. Крім того, як написано в XML, рядок, розташований між початковим та закриваючим тегами, вважається перекладним за замовчуванням.
Example
Гарний приклад:
<t t-set="additional_title">My title</t>
Поганий приклад:
<t t-set="additional_title" t-valuef="My title"/>
Визначте мета-опис.
<t t-set="meta_description">This is the description of the page that will appear on Search
Engines.</t>
Додайте CSS-клас на сторінку.
<t t-set="pageName" t-valuef="..."/>
Приховати заголовок.
<t t-set="no_header" t-value="true"/>
Приховати нижній колонтитул.
<t t-set="no_footer" t-value="true"/>
За потреби деактивуйте сторінки за замовчуванням.
/website_airproof/data/pages/home.xml
¶<record id="website.homepage" model="ir.ui.view">
<field name="active" eval="False"/>
</record>
/website_airproof/data/pages/contactus.xml
¶<record id="website.contactus" model="ir.ui.view">
<field name="active" eval="False"/>
</record>
Або ж замініть вміст цих сторінок за замовчуванням за допомогою XPath.
/website_airproof/data/pages/404.xml
¶<template id="404" inherit_id="http_routing.404">
<xpath expr="//*[@id='wrap']" position="replace">
<t t-set="additional_title" t-value="'404 - Not found'"/>
<div id="wrap" class="oe_structure">
<!-- Content -->
</div>
</xpath>
</template>
Перегляньте також
Theme pages¶
Ви можете додати на свій вебсайт скільки завгодно сторінок. Замість визначення <template>
створіть об’єкт сторінки.
Декларація
/website_airproof/data/pages/about_us.xml
¶<odoo>
<data noupdate="1">
<record id="page_about_us" model="website.page">
<field name="name">About us</field>
<field name="is_published" eval="True"/>
<field name="key">website_airproof.page_about_us</field>
<field name="url">/about-us</field>
<field name="website_id" eval="1" />
<field name="type">qweb</field>
<field name="arch" type="xml">
<t t-name="website_airproof.page_about_us">
<t t-call="website.layout">
<div id="wrap" class="oe_structure">
<!-- Content -->
</div>
</t>
</t>
</field>
</record>
</data>
</odoo>
Мультивебсайт та website_id
У контексті модуля, запис, створений вище, доступний за замовчуванням на кожному вебсайті, доступному в базі даних. Бажано вказати website_id
вебсайту, де сторінку можна буде знайти.
Поле |
Опис |
---|---|
name |
Назва сторінки (читабельна для людини). |
is_published |
Визначте, чи сторінка опублікована (видима для відвідувачів). |
key |
Ключ представлення (має бути унікальним) |
url |
Відносний шлях, де сторінка доступна. |
тип |
Тип представлення |
arch |
Архітектура перегляду (розмітка вашої сторінки) |
З <t t-call="website.layout">
ви використовуєте макет сторінки Odoo за замовчуванням у своєму коді.
атрибут noupdate
¶
Цей атрибут запобігає перезапису даних. Його можна додати або до тегу data
, що огортає деякі записи для захисту, або до тегу odoo
, щоб захистити всі записи, оголошені у файлі.
Захистіть усі записи файлу:
<?xml version="1.0" encoding="utf-8"?>
<odoo noupdate="1">
<record id="menu_company" model="website.menu">
<!-- Fields -->
</record>
<record id="menu_faq" model="website.menu">
<!-- Fields -->
</record>
</odoo>
Захистіть певні записи у файлі:
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="menu_company" model="website.menu">
<!-- Fields -->
</record>
<data noupdate="1">
<record id="menu_faq" model="website.menu">
<!-- Fields -->
</record>
<record id="menu_legal" model="website.menu">
<!-- Fields -->
</record>
</data>
</odoo>
Випадок використання
У модулі створено кілька статичних сторінок. Цю сторінку встановлено в базу даних, і кінцевий користувач оновив деякі з цих сторінок. На статичних сторінках необхідно виправити деякі помилки, щоб уникнути втрати змін, внесених кінцевим користувачем.
Проблема
У разі оновлення модуля бази даних, кожен запис, оголошений у модулі, перезапише ті, що існують у базі даних, навіть якщо кінцевий користувач змінив деякі з цих записів.
Рішення
Якщо обгорнути запис (або всі записи, оголошені у файлі) в тег <data noupdate="1"></data>
, оголошений запис створюється під час першої установки модуля, але не оновлюється після оновлення модуля.
Система виявить, що цей запис не існує, і створить його повторно.
Звісно, ні. Технічно це можна використовувати для будь-якого типу записів.
Накладання заголовка¶
Зробіть фон заголовка прозорим і розмістіть його поверх вмісту сторінки.
<field name="header_overlay" eval="True"/>

Примітка
Щоб створити вміст статичної сторінки, використовуйте метод Odoo, щоб конструктор веб-сайтів міг редагувати його. Зверніть увагу, що Odoo використовує фреймворк Bootstrap (5.1.3).
Find the available classes and components:
Page templates¶
Create preset static page templates available from the New Page dialog window.
Декларація
The page templates has to be defined into the __manifest__.py
of the module through
new_page_templates
:
/website_airproof/__manifest__.py
¶{
'name': 'Airproof Theme',
'description': '...',
'category': 'Website/Theme',
'version': '17.0.0',
'author': '...',
'license': '...',
'depends': ['website'],
'data': [
# ...
],
'assets': {
# ...
},
'new_page_templates': {
'airproof': {
'faq': ['s_airproof_text_block_h1', 's_title', 's_faq_collapse', 's_call_to_action']
}
}
Templates
Then you have to create the template using a specific naming convention based on the hierarchy into
the __manifest__.py
. In this case, the name is new_page_template_sections_airproof_faq
.
The building blocks called in this template are exactly the same as the standard ones except for
the first that has been adapted «on the fly».
Create a new instance of the standard s_text_block
(primary
attribute is important) and apply some
adaptations:
/website_airproof/views/new_page_template_templates.xml
¶<template id="s_airproof_text_block_h1" inherit_id="website.s_text_block" primary="True">
<xpath expr="//div[hasclass('container')]|//div[hasclass('o_container_small')]" position="replace">
<div class="container s_allow_columns">
<h1 class="display-1">FAQ - Help</h1>
</div>
</xpath>
</template>
Instantiate each building block (modified or not) for the page template:
/website_airproof/views/new_page_template_templates.xml
¶<template id="new_page_template_s_airproof_text_block_h1" inherit_id="website_airproof.s_airproof_text_block_h1" primary="True"/>
<template id="new_page_template_airproof_faq_s_title" inherit_id="website.s_title" primary="True"/>
Then, create your page template with some t-snippet-call
within an „#wrap“ as explained above:
/website_airproof/views/new_page_template_templates.xml
¶<div id="wrap">
<t t-snippet-call="website_airproof.new_page_template_airproof_faq_s_text_block_h1"/>
<t t-snippet-call="website_airproof.new_page_template_airproof_faq_s_title"/>
<t t-snippet-call="website_airproof.new_page_template_airproof_faq_s_faq_collapse"/>
<t t-snippet-call="website_airproof.new_page_template_airproof_faq_s_call_to_action"/>
</div>
Once the page template is created, it can be added to an existing group. Find below a list of the existing group:
/website/views/new_page_template_templates.xml
¶<template id="new_page_template_groups">
<div id="basic">Basic</div>
<div id="about">About</div>
<div id="landing">Landing Pages</div>
<div id="gallery">Gallery</div>
<div id="services">Services</div>
<div id="pricing">Pricing Plans</div>
<div id="team">Team</div>
</template>
Feel free to add custom groups to the list:
/website_airproof/views/new_page_template_templates.xml
¶<template id="new_pages_template_groups" inherit_id="website.new_pages_template_groups" name="Airproof - New Page Template Groups">
<xpath expr="//div[@id='custom']" position="after">
<div id="airproof">Airproof</div>
</xpath>
</template>

Перегляньте також
Go further by altering the building blocks of a custom template