This commit is contained in:
Oliver
2025-06-17 11:46:42 -03:00
commit 6f8f4338ea
149 changed files with 6589 additions and 0 deletions

View File

@@ -0,0 +1,55 @@
<footer class="bg-primary-light py-5">
<div class="container">
<div class="row">
{{ with site.Params.social }}
<div class="col-12 text-center mb-5">
<ul class="social-links is-circled list-unstyled list-inline font-weight-500">
{{ range . }}
<li class="list-inline-item"><a href="{{.link}}" title="{{.title}}">
<i class="icon {{.icon}}"></i> {{.title}}
</a></li>
{{ end }}
</ul>
<p>Discover the best Odoo Community Hosting Tips, Tutorials & Best Practices to optimize your Odoo experience. Whether you're a beginner or an advanced user, our blog provides expert guidance on setting up and managing your Odoo instance. Learn essential tips for choosing the right hosting environment, improving system performance, and ensuring seamless updates.</p>
<p>Our tutorials cover everything from basic configurations to advanced customization, helping you make the most of Odoos powerful features. Stay up-to-date with the latest Odoo Community trends and implement best practices for security, scalability, and data integrity.</p>
<p>With our practical insights, you can enhance your Odoo hosting setup, troubleshoot common issues, and take your business to the next level. Whether you're hosting Odoo on-premise or in the cloud, our resources will guide you every step of the way. Dive into the world of Odoo and unlock its full potential today!</p>
</div>
{{ end }}
{{ if not .IsHome }}
{{ if site.Params.subscription.enable }}
{{ with site.Params.subscription }}
<!-- subscription form -->
<form class="newsletter-block mx-auto mb-5" action="{{ .mailchimp_form_action }}" method="post" name="mc-embedded-subscribe-form" target="_blank">
<h5 class="h4 mb-3 text-center font-primary">{{ i18n `subscribe_title` }}</h5>
<div class="input-group">
<input type="text" class="form-control bg-transparent pl-3" placeholder="{{ i18n `enter_your_email`}}" aria-label="{{ i18n `enter_your_email`}}" required>
<div class="input-group-append">
<button type="submit" class="input-group-text pr-3" aria-label="News-letter"><i class="far fa-paper-plane"></i>
</button>
</div>
</div>
<div style="position: absolute; left: -5000px;" aria-hidden="true">
<input type="text" name="{{ .mailchimp_form_name }}" tabindex="-1">
</div>
</form>
{{ end }}
{{ end }}
{{ end }}
<div class="col-12 text-center">
<p class="mb-0 font-weight-500">{{site.Params.copyright | markdownify}}</p>
</div>
</div>
</div>
</footer>

View File

@@ -0,0 +1,31 @@
<meta charset="utf-8">
<title>{{ .Title }}</title>
<!-- mobile responsive meta -->
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=5">
<meta name="description" content="{{ with .Params.Description }}{{ . }}{{ else }}{{ with site.Params.description }}{{ . }}{{ end }}{{ end }}">
{{ with site.Params.author }}
<meta name="author" content="{{ . }}">{{ end }}
<meta name="theme-name" content="editor-hugo" />
<!--Favicon-->
<link rel="shortcut icon" href="{{ site.Params.favicon | absURL }}" type="image/x-icon">
<link rel="icon" href="{{ site.Params.favicon | absURL }}" type="image/x-icon">
<!-- multilingual SEO optimizations -->
{{ if .IsTranslated }}
{{ range .Page.AllTranslations }}
<link rel="alternate" title="{{.Title}}" hreflang="{{.Lang}}" href="{{.RelPermalink}}">
{{ end }}
{{ end }}
{{ with .Params.image }}
<meta property="og:image" content="{{ . | absURL }}" />
{{ end }}
{{ template "_internal/opengraph.html" . }}
{{ template "_internal/google_analytics.html" . }}
{{ site.Params.custom_script | safeHTML }}
<script defer data-domain="blog.odoo4projects.com" src="https://plausible.odoo4projects.com/js/script.js"></script>

View File

@@ -0,0 +1,137 @@
<header class="sidenav">
<div class="is-top">
<div>
<!-- Language List -->
{{ if .IsTranslated }}
<span class="d-inline-block d-md-none mr-1"><select style="cursor:pointer;background:transparent" class="m-2 border-0 text-uppercase" id="select-language" onchange="location = this.value;">
{{ $siteLanguages := site.Languages}}
{{ $pageLang := .Page.Lang}}
{{ range .Page.AllTranslations }}
{{ $translation := .}}
{{ range $siteLanguages }}
{{ if eq $translation.Lang .Lang }}
{{ $selected := false }}
{{ if eq $pageLang .Lang}}
<option id="{{ $translation.Language }}" value="{{ $translation.Permalink }}" selected>{{ .LanguageName }}
</option>
{{ else }}
<option id="{{ $translation.Language }}" value="{{ $translation.Permalink }}">{{ .LanguageName }}</option>
{{ end }}
{{ end }}
{{ end }}
{{ end }}
</select></span>
{{ end }}
{{ if site.Params.search }}
<button class="search-toggle d-inline-block d-md-none" data-toggle="search">
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="currentColor" viewBox="0 0 16 16"><path d="M11.742 10.344a6.5 6.5 0 1 0-1.397 1.398h-.001c.03.04.062.078.098.115l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85a1.007 1.007 0 0 0-.115-.1zM12 6.5a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0z"/></svg>
</button>
{{ end }}
<button class="sidenav-toggler d-inline-block {{if eq site.Params.logo_rotate false}}logo-plain{{end}}" data-toggle="sidenav-menu">
<svg id="toggler-icon" class="toggler-icon" viewBox="0 0 100 100" width="60" onclick="this.classList.toggle('active')"><path class="line top" d="m 30,33 h 40 c 0,0 9.044436,-0.654587 9.044436,-8.508902 0,-7.854315 -8.024349,-11.958003 -14.89975,-10.85914 -6.875401,1.098863 -13.637059,4.171617 -13.637059,16.368042 v 40" /><path class="line middle" d="m 30,50 h 40" /><path class="line bottom" d="m 30,67 h 40 c 12.796276,0 15.357889,-11.717785 15.357889,-26.851538 0,-15.133752 -4.786586,-27.274118 -16.667516,-27.274118 -11.88093,0 -18.499247,6.994427 -18.435284,17.125656 l 0.252538,40" /></svg>
</button>
</div>
{{ if site.Params.logo_rotate }}
<a class="navbar-brand mr-0" href="https://ODOO4projects.com">
{{ if site.Params.logo }}
<img height="{{site.Params.logo_height}}" src="{{ site.Params.logo | absURL}}"
alt="{{site.Params.logo_text}}">
{{ else }}
<span class="h3">{{site.Params.logo_text | markdownify}} <span class="text-primary">.</span></span>
{{ end }}
</a>
{{ else }}
<a class="navbar-brand plain mr-0" href="{{ site.BaseURL | relLangURL }}">
{{ if site.Params.logo }}
<img height="{{site.Params.logo_height}}" src="{{ site.Params.logo | absURL}}"
alt="{{site.Params.logo_text}}">
{{ else }}
<span class="h3">{{site.Params.logo_text | markdownify}} <span class="text-primary">.</span></span>
{{ end }}
</a>
{{ end }}
</div>
<div class="d-none d-md-block">
<ul class="social-links list-unstyled">
{{ if site.Params.search }}
<li class="mb-3">
<button class="search-toggle" data-toggle="search">
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="currentColor" viewBox="0 0 16 16"><path d="M11.742 10.344a6.5 6.5 0 1 0-1.397 1.398h-.001c.03.04.062.078.098.115l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85a1.007 1.007 0 0 0-.115-.1zM12 6.5a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0z"/></svg>
</button>
</li>
{{ end }}
<li>
<a href="mailto:{{ site.Params.email }}">
<svg width="1.15em" height="1.15em" viewBox="0 0 16 16" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" d="M0 4a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V4zm2-1a1 1 0 0 0-1 1v.217l7 4.2 7-4.2V4a1 1 0 0 0-1-1H2zm13 2.383l-4.758 2.855L15 11.114v-5.73zm-.034 6.878L9.271 8.82 8 9.583 6.728 8.82l-5.694 3.44A1 1 0 0 0 2 13h12a1 1 0 0 0 .966-.739zM1 11.114l4.758-2.876L1 5.383v5.73z"/></svg>
</a>
</li>
<!-- Language List -->
{{ if .IsTranslated }}
<li class="mt-3 pt-2"><select style="cursor:pointer" class="m-2 border-0 text-uppercase" id="select-language" onchange="location = this.value;">
{{ $siteLanguages := site.Languages}}
{{ $pageLang := .Page.Lang}}
{{ range .Page.AllTranslations }}
{{ $translation := .}}
{{ range $siteLanguages }}
{{ if eq $translation.Lang .Lang }}
{{ $selected := false }}
{{ if eq $pageLang .Lang}}
<option id="{{ $translation.Language }}" value="{{ $translation.Permalink }}" selected>{{ .LanguageName }}
</option>
{{ else }}
<option id="{{ $translation.Language }}" value="{{ $translation.Permalink }}">{{ .LanguageName }}</option>
{{ end }}
{{ end }}
{{ end }}
{{ end }}
</select></li>
{{ end }}
</ul>
</div>
</header>
<div class="sidenav-overlay" data-toggle="sidenav-menu" onclick="document.getElementById('toggler-icon').classList.remove('active')"></div>
<nav class="sidenav-menu flex-column justify-content-between">
<ul class="w-100 accordion" id="accordionMenu">
{{ range site.Menus.main }}
{{ if .HasChildren }}
<li class="nav-item">
<a class="nav-link" href="#" type="button" data-toggle="collapse" data-target="#dropdown-menu-02">{{ .Name }}</a>
<ul id="dropdown-menu-02" class="collapse list-unstyled" data-parent="#accordionMenu">
{{ range .Children }}
<li><a href="{{if .Pre}}{{if not $.IsHome}}{{site.BaseURL | relLangURL}}{{end}}{{.Pre}}{{ .URL }}{{else}}{{.URL | relLangURL}}{{end}}">{{ .Name }}</a></li>
{{ end }}
</ul>
</li>
{{ else }}
<li class="nav-item">
<a class="nav-link" href="{{if .Pre}}{{if not $.IsHome}}{{site.BaseURL | relLangURL}}{{end}}{{.Pre}}{{ .URL }}{{else}}{{.URL | relLangURL}}{{end}}">{{ .Name }}</a>
</li>
{{ end }}
{{ end }}
</ul>
{{ with site.Params.social }}
<ul class="social-links list-unstyled list-inline mt-5">
{{ range . }}
<li class="list-inline-item"><a href="{{.link}}" title="{{.title}}">
<i class="{{.icon}}"></i>
</a></li>
{{ end }}
</ul>
{{ end }}
</nav>
{{ if site.Params.search }}
<div class="search-block">
<div data-toggle="search-close">
<svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" fill="currentColor" class="text-primary" viewBox="0 0 16 16"><path d="M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708z"/></svg>
</div>
<form action="{{ `search`| relLangURL }}" method="GET">
<input id="search-field" name="s" type="search" placeholder="{{ i18n `search_placeholder`}}" class="text-center" aria-label="search-query">
</form>
</div>
{{ end }}

View File

@@ -0,0 +1,19 @@
<section class="col-12 page-header">
<div class="section my-4 py-5">
{{ if or (eq .Section "tags") (eq .Section "categories") }}
{{ if eq .Section "tags" }}
<h2 class="h4 title">{{ i18n "showing_posts_from" }} <mark>{{.Title | markdownify}}</mark> {{ i18n "tag" }}</h2>
{{ else if eq .Section "categories" }}
<h2 class="h4 title">{{ i18n "showing_posts_from" }} <mark>{{.Title | markdownify}}</mark> {{ i18n "category" }}</h2>
{{ end }}
{{ else }}
<h2 class="h4 title">{{.Title | markdownify}}</h2>
{{ end }}
</div>
</section>

View File

@@ -0,0 +1,7 @@
{{ if site.Params.preloader.enable }}
<div class="preloader">
{{ with site.Params.preloader.preloader }}
<img src="{{ . | absURL }}" alt="preloader">
{{ end }}
</div>
{{ end }}

View File

@@ -0,0 +1,72 @@
<!-- font family -->
<script src="https://cdn.jsdelivr.net/gh/theprojectsomething/webfontloader@feature/google-fonts-v2/webfontloader.js"></script>
{{$pf:= site.Params.variables.primary_font}}
{{$sf:= site.Params.variables.secondary_font}}
<script>
WebFont.load({
google: {
families: [
'Fira Sans:ital,wght@0,400;0,500;0,600;1,500;1,600'
]
}
});
</script>
<!-- JS Plugins + Main script -->
{{ $scripts := slice }}
{{ range site.Params.plugins.js}}
{{ if findRE "^http" .link }}
<script src="{{ .link | absURL }}" type="application/javascript" {{.attributes | safeHTMLAttr}}></script>
{{ else }}
{{ $scripts = $scripts | append (resources.Get .link) }}
{{ end }}
{{ end }}
{{ $scripts := $scripts | append (resources.Get "js/script.js" | minify) }}
{{ $scripts := $scripts | resources.Concat "/js/script.js" | minify | fingerprint "sha512" }}
<script crossorigin="anonymous" defer="defer" data-turbolinks-suppress-warning integrity="{{ $scripts.Data.Integrity }}" type="application/javascript">{{$scripts.Content | safeJS}}</script>
<!-- cookie -->
{{ if site.Params.cookies.enable }}
<script src="https://cdnjs.cloudflare.com/ajax/libs/js-cookie/2.2.1/js.cookie.min.js"></script>
<div id="js-cookie-box" class="cookie-box cookie-box-hide">
This site uses cookies. By continuing to use this website, you agree to their use. <span id="js-cookie-button" class="btn btn-sm btn-outline-primary ml-2">I Accept</span>
</div>
<script>
(function ($) {
const cookieBox = document.getElementById('js-cookie-box');
const cookieButton = document.getElementById('js-cookie-button');
if (!Cookies.get('cookie-box')) {
cookieBox.classList.remove('cookie-box-hide');
cookieButton.onclick = function () {
Cookies.set('cookie-box', true, {
expires: {{ site.Params.cookies.expire_days }}
});
cookieBox.classList.add('cookie-box-hide');
};
}
})(jQuery);
</script>
<!-- cookie style -->
<style>
.cookie-box {
position: fixed;
left: 0;
right: 0;
bottom: 0;
text-align: center;
z-index: 9999;
padding: 1rem 2rem;
background: rgb(71, 71, 71);
transition: all .75s cubic-bezier(.19, 1, .22, 1);
color: #fdfdfd;
}
.cookie-box-hide {
display: none;
}
</style>
{{ end }}

View File

@@ -0,0 +1,53 @@
<!-- plugins + stylesheet -->
<link rel="preconnect" href="https://fonts.gstatic.com">
{{ $styles := slice }}
{{ range site.Params.plugins.css }}
{{ if findRE "^http" .link }}
<link crossorigin="anonymous" media="all" rel="stylesheet" href="{{ .link | absURL }}" {{.attributes | safeHTMLAttr}} >
{{ else }}
{{ $styles = $styles | append (resources.Get .link) }}
{{ end }}
{{ end }}
{{ $styles := $styles | append (resources.Get "scss/style.scss" | resources.ExecuteAsTemplate "style.scss" . | toCSS) }}
{{ $styles := $styles | resources.Concat "/css/style.css" | minify | fingerprint "sha512"}}
<style crossorigin="anonymous" media="all" type="text/css" integrity="{{ $styles.Data.Integrity }}">{{$styles.Content | safeCSS}}</style>
<style>
blockquote::before {
display: none;
font-family: "{{ with site.Params.variables }} {{.icon_font}} {{ end }}";
}
.content ul li:not(.nav-item) {
position: relative;
margin-bottom: 5px;
list-style-type: none;
}
.content ul li:not(.nav-item) svg {
margin-right: 6px;
transform: scale(0.8);
color: {{ with site.Params.variables }} {{.primary_color}} {{ end }};
}
.content ul li:not(.nav-item)::before {
font-size: 14px;
font-family: "{{ with site.Params.variables }} {{.icon_font}} {{ end }}";
font-weight: 900;
content: "\f069";
display: none;
}
.notices p::before {
position: absolute;
top: 2px;
font-family: "{{ with site.Params.variables }} {{.icon_font}} {{ end }}";
font-weight: 900;
content: "\f05a";
left: 10px;
display: none;
}
.notices p svg {
position: absolute;
top: 7px;
left: 10px;
color: {{ with site.Params.variables }} {{.white}} {{ end }};
}
</style>

View File

@@ -0,0 +1,17 @@
{{ "<!-- about me -->" | safeHTML }}
<div class="widget text-center">
{{ with site.GetPage "/about" }}
<span class="widget-title">{{ i18n `about_me` }}</span>
{{ if .Params.image }}
<img loading="lazy" class="mb-4 rounded-circle w-100" style="max-width:150px" src="{{ .Params.image | absURL }}" alt="Author">
{{ else if .Params.email }}
<img loading="lazy" class="mb-4 rounded-circle w-100" style="max-width:150px" src="https://www.gravatar.com/avatar/{{ md5 .Params.email }}?s=150&pg&d=identicon">
{{ end }}
<p class="text-uppercase small mb-2">{{ i18n `my_name_is` }}</p>
<h1 class="h4 text-primary font-primary mb-3">{{ .Params.name }}</h1>
<div class="mb-0 mx-auto" style="max-width:460px">{{ .Summary }} <a href="{{ .Permalink }}" aria-label="About me" class="text-underline d-inline-block">{{ i18n `read_more` }}</a></div>
{{ end }}
</div>

View File

@@ -0,0 +1,14 @@
{{ "<!-- categories -->" | safeHTML }}
<div class="widget">
<span class="widget-title">{{ i18n "categories" }}</span>
{{ if isset site.Taxonomies "categories" }}
{{ if not (eq (len site.Taxonomies.categories) 0) }}
<ul class="sidebar-post-categories list-unstyled">
{{ range $name, $items := site.Taxonomies.categories }}
<li><a href="{{ `categories/` | absLangURL }}{{ $name | urlize | lower }}/">{{ $name | humanize }} <span>{{ len $items }}</span></a></li>
{{ end }}
</ul>
{{ end }}
{{ end }}
</div>

View File

@@ -0,0 +1,25 @@
{{ "<!-- latest post -->" | safeHTML }}
<div class="widget">
<span class="widget-title">{{ i18n `recent_post` }}</span>
<ul class="sidebar-recent-post list-unstyled">
{{ $related := ( where site.RegularPages "Type" "in" site.Params.mainSections ) | intersect (where site.Pages ".Title" "!=" .Title) | union (site.RegularPages.Related . ) }}
{{ range first 3 $related }}
<li class="recent-post-item">
<div class="media">
<div class="media-body mr-2">
<h5><a href="{{ .Permalink }}">{{ .Title }}</a></h5>
<span class="card-meta">
<span class="card-meta-date">{{.PublishDate.Format "Jan 02, 2006"}}</span>
</span>
</div>
<a href="{{ .Permalink }}" class="recent-post-image">
{{ range first 1 .Params.Images }}
<img loading="lazy" class="img-fluid rounded-circle" src="{{ . | absURL }}">
{{ end }}
</a>
</div>
</li>
{{ end }}
</ul>
</div>

View File

@@ -0,0 +1,10 @@
{{ "<!-- Search -->" | safeHTML }}
{{ if site.Params.search }}
<div class="widget">
<h5 class="widget-title"><span>{{ i18n "search" }}</span></h5>
<form action="{{ `search`| relLangURL }}" class="widget-search">
<input id="search-query" name="s" type="search" placeholder="{{ i18n `search_placeholder`}}">
<button type="submit"><i class="ti-search"></i></button>
</form>
</div>
{{ end }}

View File

@@ -0,0 +1,13 @@
{{ "<!-- tags -->" | safeHTML }}
<div class="widget">
<span class="widget-title">{{ i18n "tags" }}</span>
{{ if isset site.Taxonomies "tags" }}
{{ if not (eq (len site.Taxonomies.tags) 0) }}
<ul class="sidebar-post-tags list-unstyled list-inline">
{{ range $name, $items := site.Taxonomies.tags }}
<li class="list-inline-item"><a href="{{ `tags/` | absLangURL }}{{ $name | urlize | lower }}/">{{ $name | humanize }}</a></li>
{{ end }}
</ul>
{{ end }}
{{ end }}
</div>

View File

@@ -0,0 +1,3 @@
{{- range .Widgets -}}
{{- partial ( print "widgets/" . ) $.Scope -}}
{{- end -}}