[IMP] website, *: add website content kanban views

*: website_event, website_forum, website_hr_recruitment,
   website_sale, website_slides

The website content list views should act as a page manager (click on
a record redirects to iframe, "CREATE" and "Publish / Unpublish"
buttons, ...).

The goal of this commit is to add a kanban version of these views for
key app models ('website.page', 'blog.post',...) since the same code
can now be used for list and kanban controllers / renderers since [1].
It is especially important in mobile where the kanban views are nicer
than list views by default.

[1]: https://github.com/odoo/odoo/commit/ed09db19c372da8d8be541f365117d1ce8e965ba

task-2889981

closes odoo/odoo#101174

Related: odoo/enterprise#31821
Signed-off-by: Quentin Smetz (qsm) <qsm@odoo.com>
This commit is contained in:
xO-Tx
2022-09-27 14:54:40 +02:00
committed by qsm-odoo
parent 9d7c2bc391
commit f23399db1d
7 changed files with 228 additions and 11 deletions
+49 -1
View File
@@ -97,6 +97,54 @@
</field>
</record>
<record id="website_pages_kanban_view" model="ir.ui.view">
<field name="name">website.page.kanban</field>
<field name="model">website.page</field>
<field name="priority">99</field>
<field name="arch" type="xml">
<kanban js_class="website_pages_kanban" action="open_website_url" type="object" sample="1">
<field name="name"/>
<field name="is_homepage"/>
<field name="website_url"/>
<templates>
<t t-name="kanban-box">
<div class="d-flex flex-column">
<div class="o_text_overflow fw-bold mb-auto">
<span class="fs-3">
<i t-if="record.is_homepage.raw_value" class="fa fa-home pe-2"
title="Home page of the current website"/>
<t t-esc="record.name.value"/>
</span>
<div class="text-muted">
<t t-if="record.website_id.value">
<i class="fa fa-globe me-1" title="Website"/>
<field name="website_id" groups="website.group_multi_website"/>
</t>
</div>
<span class="text-primary" t-esc="record.website_url.value"/>
</div>
<div><field name="is_in_menu" widget="boolean"/> In Main Menu</div>
<div><field name="is_seo_optimized" widget="boolean"/> SEO Optimized</div>
<div class="border-top mt-2 pt-2">
<field name="is_published" widget="boolean_toggle"/>
<t t-if="record.is_published.raw_value">Published</t>
<t t-else="">Not Published</t>
<button
class="btn-link float-end p-0"
name="action_page_debug_view"
groups="base.group_no_one"
title="Settings"
type="object"
icon="fa-bug"
/>
</div>
</div>
</t>
</templates>
</kanban>
</field>
</record>
<record id="website_pages_view_search" model="ir.ui.view">
<field name="name">website.page.view.search</field>
<field name="model">website.page</field>
@@ -115,7 +163,7 @@
<record id="action_website_pages_list" model="ir.actions.act_window">
<field name="name">Website Pages</field>
<field name="res_model">website.page</field>
<field name="view_mode">tree</field>
<field name="view_mode">tree,kanban</field>
<field name="view_id" ref="website.website_pages_tree_view"/>
</record>
@@ -61,9 +61,9 @@
<div class="row mb-auto">
<strong class="col-8">
<span class="o_text_overflow" t-esc="record.name.value"/>
<div class="text-muted" t-if="record.website_id.value">
<div class="text-muted" t-if="record.website_id.value" groups="website.group_multi_website">
<i class="fa fa-globe me-1" title="Website"/>
<field name="website_id" groups="website.group_multi_website"/>
<field name="website_id"/>
</div>
</strong>
<strong class="col-4 text-end">
@@ -36,11 +36,45 @@
</field>
</record>
<record id="event_pages_kanban_view" model="ir.ui.view">
<field name="name">Event Pages Kanban</field>
<field name="model">event.event</field>
<field name="priority">99</field>
<field name="mode">primary</field>
<field name="inherit_id" ref="event.view_event_kanban"/>
<field name="arch" type="xml">
<xpath expr="//kanban" position="attributes">
<attribute name="js_class">website_pages_kanban</attribute>
<attribute name="type">object</attribute>
<attribute name="action">open_website_url</attribute>
</xpath>
<xpath expr="//kanban" position="inside">
<field name="website_url" invisible="1"/>
</xpath>
<xpath expr="//div[hasclass('o_kanban_record_title')]" position="inside">
<div class="text-muted" t-if="record.website_id.value" groups="website.group_multi_website">
<i class="fa fa-globe me-1" title="Website"/>
<field name="website_id"/>
</div>
</xpath>
<xpath expr="//div[hasclass('o_kanban_record_bottom')]" position="after">
<div class="border-top mt-2 pt-2">
<field name="is_published" widget="boolean_toggle"/>
<t t-if="record.is_published.raw_value">Published</t>
<t t-else="">Not Published</t>
</div>
</xpath>
</field>
</record>
<record id="action_event_pages_list" model="ir.actions.act_window">
<field name="name">Event Pages</field>
<field name="res_model">event.event</field>
<field name="view_mode">tree</field>
<field name="view_id" ref="event_pages_tree_view"/>
<field name="view_mode">tree,kanban</field>
<field name="view_ids" eval="[(5, 0, 0),
(0, 0, {'view_mode': 'tree', 'view_id': ref('event_pages_tree_view')}),
(0, 0, {'view_mode': 'kanban', 'view_id': ref('event_pages_kanban_view')}),
]"/>
<field name="context">{'create_action': 'website_event.event_event_action_add'}</field>
</record>
@@ -130,10 +130,45 @@
</field>
</record>
<record id="forum_post_view_kanban" model="ir.ui.view">
<field name="name">Forum Post Pages Kanban</field>
<field name="model">forum.post</field>
<field name="priority">99</field>
<field name="arch" type="xml">
<kanban js_class="website_pages_kanban" create="false" action="go_to_website" type="object" sample="1">
<field name="name"/>
<field name="forum_id"/>
<field name="parent_id"/>
<field name="website_url" invisible="1"/>
<templates>
<t t-name="kanban-box">
<div class="d-flex flex-column">
<div class="o_text_overflow fw-bold">
<span t-esc="record.name.value"/>
<div class="text-muted" t-if="record.website_id.value" groups="website.group_multi_website">
<i class="fa fa-globe me-1" title="Website"/>
<field name="website_id"/>
</div>
<div class="text-muted">
<i class="fa fa-comments-o me-1" title="Forum"/><t t-esc="record.forum_id.value"/>
<span t-if="!record.parent_id.raw_value" class="ms-3"><field name="child_count"/> Answers</span>
</div>
</div>
<div class="row">
<div class="col-6 text-primary"><i class="fa fa-eye me-1" title="Views"/><field name="views"/></div>
<div class="col-6 text-end"><field name="create_uid" widget="many2one_avatar_user"/></div>
</div>
</div>
</t>
</templates>
</kanban>
</field>
</record>
<record id="action_forum_post" model="ir.actions.act_window">
<field name="name">Forum Post Pages</field>
<field name="res_model">forum.post</field>
<field name="view_mode">tree,graph</field>
<field name="view_mode">tree,kanban,graph</field>
<field name="view_id" ref="view_forum_post_list"/>
<field name="search_view_id" ref="view_forum_post_search"/>
<field name="context">{'search_default_posts': 1, 'create_action': 'website_forum.forum_forum_action_add'}</field>
@@ -29,11 +29,39 @@
</field>
</record>
<record id="job_pages_kanban_view" model="ir.ui.view">
<field name="name">Job Pages Kanban</field>
<field name="model">hr.job</field>
<field name="priority">99</field>
<field name="mode">primary</field>
<field name="inherit_id" ref="hr_job_website_inherit"/>
<field name="arch" type="xml">
<kanban position="attributes">
<attribute name="js_class">website_pages_kanban</attribute>
<attribute name="type">object</attribute>
<attribute name="action">open_website_url</attribute>
</kanban>
<xpath expr="//div[hasclass('o_kanban_card_header_title')]" position="inside">
<div class="text-muted fw-bold ps-3">
<span class="me-3" t-if="record.website_id.value" groups="website.group_multi_website">
<i class="fa fa-globe me-1" title="Website"/>
<field name="website_id"/>
</span>
<field name="is_seo_optimized" widget="boolean"/> SEO Optimized
</div>
</xpath>
<xpath expr="//div[hasclass('o_link_trackers')]" position="replace"/>
</field>
</record>
<record id="action_job_pages_list" model="ir.actions.act_window">
<field name="name">Job Pages</field>
<field name="res_model">hr.job</field>
<field name="view_mode">tree</field>
<field name="view_id" ref="job_pages_tree_view"/>
<field name="view_mode">tree,kanban</field>
<field name="view_ids" eval="[(5, 0, 0),
(0, 0, {'view_mode': 'tree', 'view_id': ref('job_pages_tree_view')}),
(0, 0, {'view_mode': 'kanban', 'view_id': ref('job_pages_kanban_view')}),
]"/>
<field name="context">{'create_action': '/jobs/add'}</field>
</record>
@@ -38,11 +38,49 @@
</field>
</record>
<record id="product_pages_kanban_view" model="ir.ui.view">
<field name="name">Product Pages Kanban</field>
<field name="model">product.template</field>
<field name="priority">99</field>
<field name="mode">primary</field>
<field name="inherit_id" ref="product_template_view_kanban_website_sale"/>
<field name="arch" type="xml">
<xpath expr="//kanban" position="attributes">
<attribute name="js_class">website_pages_kanban</attribute>
<attribute name="type">object</attribute>
<attribute name="action">open_website_url</attribute>
</xpath>
<xpath expr="//kanban" position="inside">
<field name="website_url"/>
</xpath>
<xpath expr="//field[@name='name']" position="after">
<div class="text-muted" t-if="record.website_id.value" groups="website.group_multi_website">
<i class="fa fa-globe me-1" title="Website"/>
<field name="website_id"/>
</div>
<span class="text-primary" t-esc="record.website_url.value"/>
</xpath>
<xpath expr="//div[hasclass('oe_kanban_details')]" position="inside">
<div class="o_kanban_footer">
<div class="position-absolute bottom-0 end-0 m-1">
<t t-if="record.is_published.raw_value">Published </t>
<t t-else="">Not Published </t>
<field name="is_published" widget="boolean_toggle"/>
</div>
</div>
</xpath>
</field>
</record>
<record id="action_product_pages_list" model="ir.actions.act_window">
<field name="name">Product Pages</field>
<field name="res_model">product.template</field>
<field name="view_mode">tree</field>
<field name="view_mode">tree,kanban</field>
<field name="view_id" ref="product_pages_tree_view"/>
<field name="view_ids" eval="[(5, 0, 0),
(0, 0, {'view_mode': 'tree', 'sequence': 2, 'view_id': ref('product_pages_tree_view')}),
(0, 0, {'view_mode': 'kanban', 'sequence': 1, 'view_id': ref('product_pages_kanban_view')}),
]"/>
<field name="context">{'create_action': 'website_sale.product_product_action_add'}</field>
</record>
@@ -26,11 +26,45 @@
</field>
</record>
<record id="slide_channel_pages_kanban_view" model="ir.ui.view">
<field name="name">Course Pages Kanban</field>
<field name="model">slide.channel</field>
<field name="priority">99</field>
<field name="mode">primary</field>
<field name="inherit_id" ref="slide_channel_view_kanban"/>
<field name="arch" type="xml">
<xpath expr="//kanban" position="attributes">
<attribute name="js_class">website_pages_kanban</attribute>
<attribute name="type">object</attribute>
<attribute name="action">open_website_url</attribute>
</xpath>
<xpath expr="//kanban" position="inside">
<field name="website_url" invisible="1"/>
</xpath>
<xpath expr="//div[hasclass('o_kanban_primary_left')]" position="replace">
<div class="col-6 text-primary" t-if="record.website_id.value" groups="website.group_multi_website">
<i class="fa fa-globe me-1" title="Website"/>
<field name="website_id"/>
</div>
</xpath>
<xpath expr="//div[hasclass('o_kanban_card_content')]" position="after">
<div class="border-top mt-2 pt-2">
<field name="is_published" widget="boolean_toggle"/>
<t t-if="record.is_published.raw_value">Published</t>
<t t-else="">Not Published</t>
</div>
</xpath>
</field>
</record>
<record id="action_slide_channel_pages_list" model="ir.actions.act_window">
<field name="name">Course Pages</field>
<field name="res_model">slide.channel</field>
<field name="view_mode">tree</field>
<field name="view_id" ref="slide_channel_pages_tree_view"/>
<field name="view_mode">tree,kanban</field>
<field name="view_ids" eval="[(5, 0, 0),
(0, 0, {'view_mode': 'tree', 'view_id': ref('slide_channel_pages_tree_view')}),
(0, 0, {'view_mode': 'kanban', 'view_id': ref('slide_channel_pages_kanban_view')}),
]"/>
<field name="context">{'create_action': 'website_slides.slide_channel_action_add'}</field>
</record>