Сторінки¶
Використайте наступний код, щоб додати опцію для вашого нового власного мега-меню у Конструкторі веб-сайтів.
Сторінки за замовчуванням¶
В 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>
Перегляньте також
Тематичні сторінки¶
Ви можете додати на свій вебсайт скільки завгодно сторінок. Замість визначення <template> створіть об’єкт сторінки.
Декларація
/website_airproof/data/pages/about_us.xml¶<?xml version="1.0" encoding="utf-8"?>
<odoo 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>
</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).
Знайдіть доступні класи та компоненти:
Шаблони сторінок¶
Створення готових шаблонів статичних сторінок доступне у діалоговому вікні Нова сторінка.
Декларація
Шаблони сторінок мають бути визначені у файлі __manifest__.py модуля через new_page_templates та new_page_template_templates.xml:
/website_airproof/__manifest__.py¶{
'name': 'Airproof Theme',
'description': '...',
'category': 'Website/Theme',
'version': '17.0.0',
'author': '...',
'license': '...',
'depends': ['website'],
'data': [
# ...
'views/new_page_template_templates.xml'
],
'assets': {
# ...
},
'new_page_templates': {
'airproof': {
'faq': ['s_airproof_text_block_h1', 's_title', 's_faq_collapse', 's_call_to_action']
}
}
Шаблони
Потім вам потрібно створити шаблон, використовуючи певну домовленість про іменування на основі ієрархії, у файлі __manifest__.py. У цьому випадку назва - new_page_template_sections_airproof_faq. Структурні блоки, що викликаються в цьому шаблоні, точно такі ж, як і у стандартних, за винятком першого, який був адаптований «на льоту».
Створіть новий екземпляр стандартного s_text_block (атрибут primary є важливим) та застосуйте деякі адаптації:
/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>
Створіть екземпляр кожного структурного блоку (зміненого чи ні) для шаблону сторінки:
/website_airproof/views/new_page_template_templates.xml¶<template id="new_page_template_airproof_faq_s_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"/>
<template id="new_page_template_airproof_faq_s_faq_collapse" inherit_id="website.s_faq_collapse" primary="True"/>
<template id="new_page_template_airproof_faq_s_call_to_action" inherit_id="website.s_call_to_action" primary="True"/>
Потім створіть шаблон сторінки з деякими викликами t-snippet-call всередині #wrap, як описано вище:
/website_airproof/views/new_page_template_templates.xml¶<template id="new_page_template_sections_airproof_faq" name="Airproof - New Page Template FAQ">
<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>
</template>
Після створення шаблону сторінки створіть власну групу та додайте її до існуючих. Нижче наведено список існуючих груп:
/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>
Ви можете додавати власні групи до списку:
/website_airproof/views/new_page_template_templates.xml¶<template id="new_page_template_groups" inherit_id="website.new_page_template_groups" name="Airproof - New Page Template Groups">
<xpath expr="//div[@id='custom']" position="after">
<div id="airproof">Airproof</div>
</xpath>
</template>
Перегляньте також