Сторінки

Використайте наступний код, щоб додати опцію для вашого нового власного мега-меню у Конструкторі веб-сайтів.

Сторінки за замовчуванням

В 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>
List of existing static page templates