[IMP] website, *: fill the "Content" area of the main website menu

*: website_blog, website_event, website_forum, website_hr_recruitment,
   website_sale, website_slides

As indicated by previous commits, new custom list views are created to
fill the "Content" area of the main website menu with key app models:
blog posts, events, forum posts, jobs, products and courses (+ some in
the enterprise version, see related commit).

Those list views will act as the page manager one: a click on an item
redirect to the website iframe, the create button acts as creating a
record via the "+ New" systray button while being on the iframe, the
delete button will in the future allow to know the page that mentions
the related object before deleting it, etc etc.

task-2889981

closes odoo/odoo#98937

Related: odoo/enterprise#30782
Signed-off-by: Quentin Smetz (qsm) <qsm@odoo.com>
This commit is contained in:
qsm-odoo
2022-09-05 05:21:06 +02:00
parent 2bd1ba0e06
commit da3f4c2aff
15 changed files with 243 additions and 55 deletions
@@ -73,6 +73,7 @@
<record id="website_pages_tree_view" model="ir.ui.view">
<field name="name">website.page.list</field>
<field name="model">website.page</field>
<field name="priority">99</field>
<field name="arch" type="xml">
<tree js_class="website_pages_list" type="object" action="open_website_url" default_order="url">
<field name="is_homepage" invisible="1"/>
@@ -1,6 +1,5 @@
<?xml version="1.0"?>
<odoo>
<!-- Blog views -->
<record id="view_blog_blog_list" model="ir.ui.view">
<field name="name">blog.blog.list</field>
@@ -128,8 +127,8 @@
<menuitem id="menu_blog_global" parent="menu_website_blog_root_global" name="Blogs" action="action_blog_blog" sequence="20"/>
<menuitem id="menu_blog_tag_global" parent="menu_website_blog_root_global" name="Tags" action="action_tags" sequence="40" />
<menuitem id="menu_blog_tag_global" parent="menu_website_blog_root_global" name="Tags" action="action_tags" sequence="30"/>
<menuitem id="menu_website_blog_tag_category_global" parent="menu_website_blog_root_global"
name="Tag Categories" action="action_tag_category" sequence="50" />
name="Tag Categories" action="action_tag_category" sequence="40"/>
</odoo>
@@ -69,10 +69,10 @@
</div>
<div class="col-4 text-end">
<img t-if="record.author_id.raw_value"
t-att-title="record.author_id.value"
t-att-alt="record.author_id.value"
class="oe_kanban_avatar o_image_24_cover"
t-att-src="kanban_image('res.partner', 'avatar_128', record.author_id.raw_value)"/>
t-att-title="record.author_id.value"
t-att-alt="record.author_id.value"
class="oe_kanban_avatar o_image_24_cover"
t-att-src="kanban_image('res.partner', 'avatar_128', record.author_id.raw_value)"/>
</div>
</div>
</div>
@@ -101,41 +101,42 @@
</record>
<record id="view_blog_post_list" model="ir.ui.view">
<field name="name">blog.post.list</field>
<field name="name">Blog Post Pages Tree</field>
<field name="model">blog.post</field>
<field name="priority">99</field>
<field name="arch" type="xml">
<tree string="Blog Posts" multi_edit="1" sample="1">
<field name="name"/>
<tree js_class="website_pages_list" type="object" action="open_website_url">
<field name="active" invisible="1"/>
<field name="author_id"/>
<field name="blog_id"/>
<field name="name"/>
<field name="website_url"/>
<field name="author_id" optional="show"/>
<field name="blog_id" optional="hide"/>
<field name="create_uid" optional="hide"/>
<field name="write_uid" optional="hide"/>
<field name="write_date" optional="hide"/>
<field name="is_seo_optimized"/>
<field name="is_published"/>
<field name="website_id" groups="website.group_multi_website"/>
<field name="is_published" string="Is Published" optional="hide"/>
<field name="create_uid" invisible="1"/>
<field name="write_uid"/>
<field name="write_date"/>
</tree>
</field>
</record>
<record id="action_blog_post" model="ir.actions.act_window">
<field name="name">Blog Posts</field>
<field name="name">Blog Post Pages</field>
<field name="res_model">blog.post</field>
<field name="view_mode">tree,form,kanban</field>
<field name="view_mode">tree,kanban,form</field>
<field name="view_id" ref="view_blog_post_list"/>
<field name="search_view_id" ref="view_blog_post_search"/>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create a new blog post
</p>
</field>
<field name="context">{'create_action': 'website_blog.blog_post_action_add'}</field>
</record>
<menuitem name="Blog Post"
id="menu_website_blog_post"
sequence="30"
parent="menu_website_blog_root_global"
groups="website.group_website_designer"
<menuitem id="menu_blog_post_pages"
parent="website.menu_content"
sequence="20"
name="Blog Posts"
action="action_blog_post"/>
</odoo>
+1
View File
@@ -33,6 +33,7 @@
'views/website_event_menu_views.xml',
'views/website_visitor_views.xml',
'views/event_menus.xml',
'views/website_pages_views.xml',
'views/event_event_add.xml',
'security/ir.model.access.csv',
'security/event_security.xml',
@@ -0,0 +1,43 @@
<?xml version="1.0"?>
<odoo>
<record id="event_pages_tree_view" model="ir.ui.view">
<field name="name">Event Pages Tree</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_tree"/>
<field name="arch" type="xml">
<xpath expr="//tree" position="attributes">
<attribute name="js_class">website_pages_list</attribute>
<attribute name="type">object</attribute>
<attribute name="action">open_website_url</attribute>
</xpath>
<field name="name" position="after">
<field name="website_url"/>
</field>
<xpath expr="//tree">
<field name="is_seo_optimized"/>
<field name="is_published"/>
<field name="website_id" position="move"/>
</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="context">{'create_action': 'website_event.event_event_action_add'}</field>
</record>
<menuitem id="menu_event_pages"
parent="website.menu_content"
sequence="40"
name="Events"
action="action_event_pages_list"/>
</odoo>
+9 -9
View File
@@ -255,7 +255,7 @@ class Forum(models.Model):
return {
'type': 'ir.actions.act_url',
'target': 'self',
'url': self._compute_website_url(),
'url': self.env['website'].get_client_action_url(self._compute_website_url()),
}
@api.model
@@ -313,6 +313,7 @@ class Post(models.Model):
views = fields.Integer('Views', default=0, readonly=True, copy=False)
active = fields.Boolean('Active', default=True)
website_message_ids = fields.One2many(domain=lambda self: [('model', '=', self._name), ('message_type', 'in', ['email', 'comment'])])
website_url = fields.Char('Website URL', compute='_compute_website_url')
website_id = fields.Many2one(related='forum_id.website_id', readonly=True)
# history
@@ -965,18 +966,18 @@ class Post(models.Model):
return super(Post, self)._notify_thread_by_inbox(message, recipients_data, msg_vals=msg_vals, **kwargs)
def _compute_website_url(self):
return '/forum/{forum}/{post}{anchor}'.format(
forum=slug(self.forum_id),
post=slug(self),
anchor=self.parent_id and '#answer_%d' % self.id or ''
)
for post in self:
forum_slug = slug(post.forum_id)
post_slug = slug(post)
anchor = post.parent_id and '#answer_%d' % post.id or ''
post.website_url = f'/forum/{forum_slug}/{post_slug}{anchor}'
def go_to_website(self):
self.ensure_one()
return {
'type': 'ir.actions.act_url',
'target': 'self',
'url': self._compute_website_url(),
'url': self.env['website'].get_client_action_url(self.website_url),
}
@api.model
@@ -984,7 +985,7 @@ class Post(models.Model):
with_description = options['displayDescription']
with_date = options['displayDetail']
search_fields = ['name']
fetch_fields = ['id', 'name']
fetch_fields = ['id', 'name', 'website_url']
mapping = {
'name': {'name': 'name', 'type': 'text', 'match': True},
'website_url': {'name': 'website_url', 'type': 'text', 'truncate': False},
@@ -1043,7 +1044,6 @@ class Post(models.Model):
with_date = 'detail' in mapping
results_data = super()._search_render_results(fetch_fields, mapping, icon, limit)
for post, data in zip(self, results_data):
data['website_url'] = post._compute_website_url()
if with_date:
data['date'] = self.env['ir.qweb.field.date'].record_to_html(post, 'write_date', {})
return results_data
+4 -5
View File
@@ -229,15 +229,14 @@
<field name="view_mode">tree</field>
</record>
<!-- FORUM MENUS -->
<menuitem name="Forum" id="menu_website_forum_global"
parent="website.menu_website_global_configuration" sequence="170" groups="website.group_website_designer"/>
<menuitem id="menu_forum_global" parent="menu_website_forum_global" name="Forums" action="action_forum_forum" sequence="10"/>
<menuitem id="menu_forum_rank_global" parent="menu_website_forum_global" name="Ranks" action="gamification.gamification_karma_ranks_action" sequence="30"/>
<menuitem id="menu_forum_tag_global" parent="menu_website_forum_global" name="Tags" action="forum_tag_action" sequence="40"/>
<menuitem id="menu_forum_badges" parent="menu_website_forum_global" name="Badges" action="gamification.badge_list_action" sequence="50"/>
<menuitem id="menu_forum_post_reasons" parent="menu_website_forum_global" name="Close Reasons" action="forum_post_reasons_action" sequence="60"/>
<menuitem id="menu_forum_rank_global" parent="menu_website_forum_global" name="Ranks" action="gamification.gamification_karma_ranks_action" sequence="20"/>
<menuitem id="menu_forum_tag_global" parent="menu_website_forum_global" name="Tags" action="forum_tag_action" sequence="30"/>
<menuitem id="menu_forum_badges" parent="menu_website_forum_global" name="Badges" action="gamification.badge_list_action" sequence="40"/>
<menuitem id="menu_forum_post_reasons" parent="menu_website_forum_global" name="Close Reasons" action="forum_post_reasons_action" sequence="50"/>
</data>
</odoo>
@@ -106,31 +106,37 @@
</record>
<record id="view_forum_post_list" model="ir.ui.view">
<field name="name">forum.post.list</field>
<field name="name">Forum Post Pages Tree</field>
<field name="model">forum.post</field>
<field name="priority">99</field>
<field name="arch" type="xml">
<tree string="Forum Posts">
<field name="name"/>
<tree js_class="website_pages_list" create="false" type="object" action="go_to_website">
<field name="active" invisible="1"/>
<field name="forum_id"/>
<field name="views" string="# Views" sum="Total Views"/>
<field name="child_count" string="# Answers" sum="Total Answers"/>
<field name="name"/>
<field name="website_url"/>
<field name="forum_id" optional="show"/>
<field name="views" string="# Views" sum="Total Views" optional="hide"/>
<field name="child_count" string="# Answers" sum="Total Answers" optional="hide"/>
<field name="state" widget="badge"
decoration-success="state == 'active'"
decoration-danger="state == 'close'"
decoration-warning="state not in ('active', 'close')"/>
<field name="website_id" groups="website.group_multi_website" optional="hide"/>
decoration-warning="state not in ('active', 'close')" optional="show"/>
<field name="is_seo_optimized"/>
<field name="website_id" groups="website.group_multi_website"/>
</tree>
</field>
</record>
<record id="action_forum_post" model="ir.actions.act_window">
<field name="name">Forum Posts</field>
<field name="name">Forum Post Pages</field>
<field name="res_model">forum.post</field>
<field name="view_mode">tree,form,graph</field>
<field name="view_mode">tree,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}</field>
<field name="context">{'search_default_posts': 1, 'create_action': 'website_forum.forum_forum_action_add'}</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create a new forum post
@@ -138,6 +144,10 @@
</field>
</record>
<menuitem id="menu_forum_posts" parent="menu_website_forum_global" name="Forum Post" action="action_forum_post" sequence="20"/>
<menuitem id="menu_forum_post_pages"
parent="website.menu_content"
sequence="80"
name="Forum Posts"
action="action_forum_post"/>
</odoo>
@@ -16,6 +16,7 @@
'views/website_hr_recruitment_templates.xml',
'views/hr_recruitment_views.xml',
'views/hr_job_views.xml',
'views/website_pages_views.xml',
'views/snippets.xml',
],
'demo': [
@@ -64,7 +64,7 @@
<field name="website_id" groups="website.group_multi_website" optional="hide"/>
</field>
<xpath expr="//field[@name='alias_id']" position="before">
<field name="website_published" string="Published" widget="toggle_button"/>
<field name="is_published" string="Published" widget="toggle_button"/>
</xpath>
</field>
</record>
@@ -0,0 +1,43 @@
<?xml version="1.0"?>
<odoo>
<record id="job_pages_tree_view" model="ir.ui.view">
<field name="name">Job Pages Tree</field>
<field name="model">hr.job</field>
<field name="priority">99</field>
<field name="mode">primary</field>
<field name="inherit_id" ref="hr.view_hr_job_tree"/>
<field name="arch" type="xml">
<xpath expr="//tree" position="attributes">
<attribute name="js_class">website_pages_list</attribute>
<attribute name="type">object</attribute>
<attribute name="action">open_website_url</attribute>
</xpath>
<field name="name" position="after">
<field name="website_url"/>
</field>
<xpath expr="//tree">
<field name="is_seo_optimized"/>
<field name="is_published" position="move"/>
<field name="website_id" groups="website.group_multi_website"/>
</xpath>
</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="context">{'create_action': '/jobs/add'}</field>
</record>
<menuitem id="menu_job_pages"
parent="website.menu_content"
sequence="70"
name="Jobs"
action="action_job_pages_list"/>
</odoo>
+1
View File
@@ -34,6 +34,7 @@
'views/base_unit_view.xml',
'views/product_product_add.xml',
'views/website_views.xml',
'views/website_pages_views.xml',
],
'demo': [
'data/demo.xml',
@@ -0,0 +1,45 @@
<?xml version="1.0"?>
<odoo>
<record id="product_pages_tree_view" model="ir.ui.view">
<field name="name">Product Pages Tree</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_tree_website_sale"/>
<field name="arch" type="xml">
<xpath expr="//tree" position="attributes">
<attribute name="js_class">website_pages_list</attribute>
<attribute name="type">object</attribute>
<attribute name="action">open_website_url</attribute>
</xpath>
<field name="is_published" position="replace"/>
<field name="name" position="after">
<field name="website_url"/>
</field>
<xpath expr="//tree">
<field name="is_seo_optimized"/>
<field name="is_published"/>
<field name="website_id" position="move"/>
</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_id" ref="product_pages_tree_view"/>
<field name="context">{'create_action': 'website_sale.product_product_action_add'}</field>
</record>
<menuitem id="menu_product_pages"
parent="website.menu_content"
sequence="30"
name="Products"
action="action_product_pages_list"/>
</odoo>
+1
View File
@@ -47,6 +47,7 @@ Featuring
'views/website_slides_templates_lesson_embed.xml',
'views/website_slides_templates_profile.xml',
'views/website_slides_templates_utils.xml',
'views/website_pages_views.xml',
'views/slide_channel_add.xml',
'wizard/slide_channel_invite_views.xml',
'data/gamification_data.xml',
@@ -0,0 +1,43 @@
<?xml version="1.0"?>
<odoo>
<record id="slide_channel_pages_tree_view" model="ir.ui.view">
<field name="name">Course Pages Tree</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_tree"/>
<field name="arch" type="xml">
<xpath expr="//tree" position="attributes">
<attribute name="js_class">website_pages_list</attribute>
<attribute name="type">object</attribute>
<attribute name="action">open_website_url</attribute>
</xpath>
<field name="name" position="after">
<field name="website_url"/>
</field>
<xpath expr="//tree">
<field name="is_seo_optimized"/>
<field name="is_published"/>
<field name="website_id" position="move"/>
</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="context">{'create_action': 'website_slides.slide_channel_action_add'}</field>
</record>
<menuitem id="menu_slide_channel_pages"
parent="website.menu_content"
sequence="50"
name="Courses"
action="action_slide_channel_pages_list"/>
</odoo>