Alaguraj0361 42ff2972e4 Add custom product details layout and shop page enhancements
- Introduced a new product details layout in `product_details_page.xml` with styled elements and hidden original Odoo components for a premium look.
- Enhanced the product form view in `product_views.xml` to include a new field for marking popular deals.
- Updated the configuration settings view in `res_config_settings_views.xml` to add a delivery option toggle during checkout.
- Reorganized the shop page layout in `shop_page.xml` to include dynamic categories and attributes, along with a new arrivals section.
- Created a new snippets file `snippets.xml` for potential future custom drag-and-drop blocks.
- Added a script in `parse_content.py` for parsing specific content from a markdown file.
2026-06-08 19:46:45 +05:30

132 lines
5.1 KiB
Python

from markupsafe import Markup
import json
import os
from odoo import http
from odoo.http import request
# Helper to load blogs from JSON
def get_blogs():
json_path = os.path.join(os.path.dirname(__file__), '../data/blogs.json')
if os.path.exists(json_path):
with open(json_path, 'r', encoding='utf-8-sig') as f:
blogs = json.load(f)
# Reversing so the last added blog appears first
return blogs[::-1] if isinstance(blogs, list) else blogs
return []
class ContactController(http.Controller):
@http.route('/contactus/submit', type='http', auth="public", website=True, csrf=True)
def contact_submit(self, **post):
import logging
_logger = logging.getLogger(__name__)
name = post.get('name')
email = post.get('email_from')
phone = post.get('phone')
subject = post.get('subject')
message = post.get('description')
# Format the email content
email_content = f"""
<div style="font-family: Arial, sans-serif; padding: 20px; border: 1px solid #ddd; border-radius: 8px;">
<h2 style="color: #ffb800; border-bottom: 2px solid #ffb800; padding-bottom: 10px;">New Contact Form Submission - Shiva Sakthi</h2>
<table style="width: 100%; border-collapse: collapse; margin-top: 15px;">
<tr>
<td style="padding: 8px; font-weight: bold; width: 30%;">Full Name:</td>
<td style="padding: 8px;">{name}</td>
</tr>
<tr>
<td style="padding: 8px; font-weight: bold;">Email:</td>
<td style="padding: 8px;">{email}</td>
</tr>
<tr>
<td style="padding: 8px; font-weight: bold;">Phone:</td>
<td style="padding: 8px;">{phone}</td>
</tr>
<tr>
<td style="padding: 8px; font-weight: bold;">Subject:</td>
<td style="padding: 8px;">{subject}</td>
</tr>
</table>
<div style="margin-top: 20px; padding: 15px; background-color: #F8F9FA; border-left: 4px solid #ffb800;">
<strong style="display: block; margin-bottom: 10px;">Message:</strong>
<div style="white-space: pre-wrap;">{message}</div>
</div>
</div>
"""
company_email = request.env['res.company'].sudo().search([], limit=1).email or 'info@shivasakthi.ca'
mail_values = {
'subject': f"Contact Form: {subject or 'Inquiry'} from {name}",
'body_html': email_content,
'email_to': 'info@shivasakthi.ca',
'email_from': company_email,
'reply_to': email,
}
# Create and send the mail
try:
mail = request.env['mail.mail'].sudo().create(mail_values)
mail.send()
_logger.info("Contact form email sent successfully to %s", mail_values['email_to'])
except Exception as e:
_logger.error("Failed to send contact form email: %s", str(e))
return request.render('dine360_theme_shivasakthi.contact_thank_you')
class BlogController(http.Controller):
@http.route(['/blog', '/blog/page/<int:page>'], type='http', auth='public', website=True)
def blog_list(self, page=1, **post):
all_blogs = get_blogs()
# Pagination Settings
per_page = 12
total = len(all_blogs)
# Odoo's built-in pager
pager = request.website.pager(
url='/blog',
total=total,
page=page,
step=per_page,
scope=5,
url_args=post,
)
# Extract blogs for current page
start = (page - 1) * per_page
end = start + per_page
blogs_paged = all_blogs[start:end]
return request.render('dine360_theme_shivasakthi.blog_page', {
'blog_posts': blogs_paged,
'pager': pager,
})
@http.route(['/blog/<string:slug>'], type='http', auth='public', website=True)
def blog_detail(self, slug, **post):
all_blogs = get_blogs()
blog_post = next((b for b in all_blogs if b['slug'] == slug), None)
if not blog_post:
return request.not_found()
recent_posts = [b for b in all_blogs if b['slug'] != slug][:3]
# Get categories and counts
categories = {}
for b in all_blogs:
cat = b.get('category', 'Restaurant')
categories[cat] = categories.get(cat, 0) + 1
return request.render('dine360_theme_shivasakthi.blog_detail_layout', {
'blog_title': blog_post.get('title'),
'blog_img': blog_post.get('image'),
'blog_date': blog_post.get('date'),
'blog_category': blog_post.get('category'),
'blog_content': Markup(blog_post.get('content') or ''),
'recent_posts': recent_posts,
'categories': categories,
})