Contact info snippet
This commit is contained in:
parent
8c6319feaf
commit
f7a2ec4b96
5 changed files with 27 additions and 263 deletions
|
@ -1,200 +0,0 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.db import models
|
|
||||||
from modelcluster.fields import ParentalKey
|
|
||||||
|
|
||||||
from wagtail.wagtailcore import blocks
|
|
||||||
from wagtail.wagtailcore.models import Page, Orderable
|
|
||||||
from wagtail.wagtailcore.fields import StreamField, RichTextField
|
|
||||||
from wagtail.wagtailadmin.edit_handlers import FieldPanel, StreamFieldPanel, InlinePanel, MultiFieldPanel
|
|
||||||
from wagtail.wagtailimages.blocks import ImageChooserBlock
|
|
||||||
from wagtail.wagtailimages.edit_handlers import ImageChooserPanel
|
|
||||||
from wagtail.wagtailsearch import index
|
|
||||||
|
|
||||||
from puput.models import EntryPage
|
|
||||||
|
|
||||||
from .util import TranslatedField
|
|
||||||
|
|
||||||
class ArticleIndexPage(Page):
|
|
||||||
title_fr = models.CharField(max_length=255, default="")
|
|
||||||
trans_title = TranslatedField(
|
|
||||||
'title',
|
|
||||||
'title_fr',
|
|
||||||
)
|
|
||||||
|
|
||||||
intro_de = RichTextField(default='', blank=True)
|
|
||||||
intro_fr = RichTextField(default='', blank=True)
|
|
||||||
trans_intro = TranslatedField(
|
|
||||||
'intro_de',
|
|
||||||
'intro_fr',
|
|
||||||
)
|
|
||||||
|
|
||||||
content_panels = Page.content_panels + [
|
|
||||||
FieldPanel('intro_de'),
|
|
||||||
FieldPanel('title_fr'),
|
|
||||||
FieldPanel('intro_fr'),
|
|
||||||
]
|
|
||||||
|
|
||||||
def get_context(self, request):
|
|
||||||
context = super(ArticleIndexPage, self).get_context(request)
|
|
||||||
articles = ArticlePage.objects.child_of(self).live()
|
|
||||||
context['articles'] = articles
|
|
||||||
return context
|
|
||||||
|
|
||||||
subpage_types = ['home.ArticlePage', 'home.ArticleIndexPage']
|
|
||||||
class Meta:
|
|
||||||
verbose_name = "Rubrik"
|
|
||||||
|
|
||||||
class ArticlePage(Page):
|
|
||||||
title_fr = models.CharField(max_length=255, default="")
|
|
||||||
trans_title = TranslatedField(
|
|
||||||
'title',
|
|
||||||
'title_fr',
|
|
||||||
)
|
|
||||||
|
|
||||||
intro_de = RichTextField(default='', blank=True)
|
|
||||||
intro_fr = RichTextField(default='', blank=True)
|
|
||||||
trans_intro = TranslatedField(
|
|
||||||
'intro_de',
|
|
||||||
'intro_fr',
|
|
||||||
)
|
|
||||||
|
|
||||||
body_de = StreamField([
|
|
||||||
('paragraph', blocks.RichTextBlock()),
|
|
||||||
('image', ImageChooserBlock()),
|
|
||||||
('section', blocks.CharBlock(classname="full title")),
|
|
||||||
], null=True, blank=True)
|
|
||||||
body_fr = StreamField([
|
|
||||||
('paragraph', blocks.RichTextBlock()),
|
|
||||||
('image', ImageChooserBlock()),
|
|
||||||
('section', blocks.CharBlock(classname="full title")),
|
|
||||||
], null=True, blank=True)
|
|
||||||
trans_body = TranslatedField(
|
|
||||||
'body_de',
|
|
||||||
'body_fr',
|
|
||||||
)
|
|
||||||
|
|
||||||
date = models.DateField("Date", null=True, blank=True)
|
|
||||||
feed_image = models.ForeignKey(
|
|
||||||
'wagtailimages.Image',
|
|
||||||
null=True,
|
|
||||||
blank=True,
|
|
||||||
on_delete=models.SET_NULL,
|
|
||||||
related_name='+'
|
|
||||||
)
|
|
||||||
|
|
||||||
search_fields = Page.search_fields + [
|
|
||||||
index.SearchField('body_de'),
|
|
||||||
index.SearchField('body_fr'),
|
|
||||||
index.SearchField('title'),
|
|
||||||
index.SearchField('title_fr'),
|
|
||||||
index.SearchField('intro_de'),
|
|
||||||
index.SearchField('intro_fr'),
|
|
||||||
]
|
|
||||||
content_panels = [
|
|
||||||
MultiFieldPanel([
|
|
||||||
FieldPanel('title'),
|
|
||||||
FieldPanel('intro_de'),
|
|
||||||
StreamFieldPanel('body_de'),
|
|
||||||
], heading="Deutsch"),
|
|
||||||
MultiFieldPanel([
|
|
||||||
FieldPanel('title_fr'),
|
|
||||||
FieldPanel('intro_fr'),
|
|
||||||
StreamFieldPanel('body_fr'),
|
|
||||||
], heading="Français"),
|
|
||||||
ImageChooserPanel('feed_image'),
|
|
||||||
]
|
|
||||||
promote_panels = [
|
|
||||||
FieldPanel('date'),
|
|
||||||
InlinePanel('related_links', label="Links"),
|
|
||||||
MultiFieldPanel(Page.promote_panels, "Common page configuration"),
|
|
||||||
]
|
|
||||||
parent_page_types = ['home.ArticleIndexPage']
|
|
||||||
subpage_types = []
|
|
||||||
class Meta:
|
|
||||||
verbose_name = "Artikel"
|
|
||||||
|
|
||||||
class ArticleRelatedLink(Orderable):
|
|
||||||
page = ParentalKey(ArticlePage, related_name='related_links')
|
|
||||||
name = models.CharField(max_length=255)
|
|
||||||
url = models.URLField()
|
|
||||||
panels = [
|
|
||||||
FieldPanel('name'),
|
|
||||||
FieldPanel('url'),
|
|
||||||
]
|
|
||||||
|
|
||||||
class InfoBlock(blocks.StructBlock):
|
|
||||||
title = blocks.CharBlock(required=True)
|
|
||||||
photo = ImageChooserBlock()
|
|
||||||
summary = blocks.RichTextBlock(required=True)
|
|
||||||
action = blocks.CharBlock()
|
|
||||||
url = blocks.URLBlock()
|
|
||||||
|
|
||||||
class HomePage(Page):
|
|
||||||
intro_de = RichTextField(default='')
|
|
||||||
intro_fr = RichTextField(default='')
|
|
||||||
trans_intro = TranslatedField(
|
|
||||||
'intro_de',
|
|
||||||
'intro_fr',
|
|
||||||
)
|
|
||||||
|
|
||||||
body_de = RichTextField(default='', blank=True)
|
|
||||||
body_fr = RichTextField(default='', blank=True)
|
|
||||||
trans_body = TranslatedField(
|
|
||||||
'body_de',
|
|
||||||
'body_fr',
|
|
||||||
)
|
|
||||||
|
|
||||||
infos_de = StreamField([
|
|
||||||
('info', InfoBlock())
|
|
||||||
], null=True, blank=True)
|
|
||||||
infos_fr = StreamField([
|
|
||||||
('info', InfoBlock())
|
|
||||||
], null=True, blank=True)
|
|
||||||
trans_infos = TranslatedField(
|
|
||||||
'infos_de',
|
|
||||||
'infos_fr',
|
|
||||||
)
|
|
||||||
|
|
||||||
content_panels = Page.content_panels + [
|
|
||||||
MultiFieldPanel([
|
|
||||||
FieldPanel('intro_de', classname="full"),
|
|
||||||
FieldPanel('body_de', classname="full"),
|
|
||||||
StreamFieldPanel('infos_de'),
|
|
||||||
], heading="Deutsch"),
|
|
||||||
MultiFieldPanel([
|
|
||||||
FieldPanel('intro_fr', classname="full"),
|
|
||||||
FieldPanel('body_fr', classname="full"),
|
|
||||||
StreamFieldPanel('infos_fr'),
|
|
||||||
], heading="Français"),
|
|
||||||
]
|
|
||||||
|
|
||||||
@property
|
|
||||||
def featured(self):
|
|
||||||
# Get list of live pages that are descendants of this page
|
|
||||||
articles = ArticlePage.objects.live() #.descendant_of(self)
|
|
||||||
# Order by most recent date first
|
|
||||||
#articles = articles.order_by('-date')
|
|
||||||
return articles[:4]
|
|
||||||
|
|
||||||
@property
|
|
||||||
def newsfeed(self):
|
|
||||||
# Get list of latest news
|
|
||||||
# TODO: fetch children of 'News (DE)'
|
|
||||||
entries = EntryPage.objects.live().descendant_of(self)
|
|
||||||
# Order by most recent date first
|
|
||||||
entries = entries.order_by('-date')
|
|
||||||
return entries[:4]
|
|
||||||
|
|
||||||
def get_context(self, request):
|
|
||||||
# Update template context
|
|
||||||
context = super(HomePage, self).get_context(request)
|
|
||||||
context['featured'] = self.featured
|
|
||||||
context['newsfeed'] = self.newsfeed
|
|
||||||
return context
|
|
||||||
|
|
||||||
parent_page_types = []
|
|
||||||
class Meta:
|
|
||||||
verbose_name = "Frontpage"
|
|
|
@ -1,36 +0,0 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.db import models
|
|
||||||
|
|
||||||
from wagtail.wagtailsnippets.models import register_snippet
|
|
||||||
|
|
||||||
from wagtail.wagtailcore.models import Page
|
|
||||||
from wagtail.wagtailadmin.edit_handlers import FieldPanel
|
|
||||||
|
|
||||||
from .util import TranslatedField
|
|
||||||
|
|
||||||
@register_snippet
|
|
||||||
class Contact(models.Model):
|
|
||||||
title = models.CharField(max_length=255, default="")
|
|
||||||
title_fr = models.CharField(max_length=255, default="")
|
|
||||||
trans_title = TranslatedField(
|
|
||||||
'title',
|
|
||||||
'title_fr',
|
|
||||||
)
|
|
||||||
address = models.TextField(default="", blank=True)
|
|
||||||
phone = models.CharField(max_length=40, default="")
|
|
||||||
email = models.CharField(max_length=40, default="")
|
|
||||||
www = models.URLField(null=True, blank=True)
|
|
||||||
|
|
||||||
panels = Page.content_panels + [
|
|
||||||
FieldPanel('title_fr'),
|
|
||||||
FieldPanel('address'),
|
|
||||||
FieldPanel('phone'),
|
|
||||||
FieldPanel('email'),
|
|
||||||
FieldPanel('www'),
|
|
||||||
]
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
return self.trans_title
|
|
|
@ -1,8 +1,28 @@
|
||||||
|
<div class="col-md-4" id="contact">
|
||||||
|
|
||||||
<address>
|
<address>
|
||||||
<p>{{ contact.trans_title }}<br>
|
<p>{{ contact.trans_title }}<br>
|
||||||
{{ contact.address }}
|
{{ contact.address }}
|
||||||
</p>
|
</p>
|
||||||
<p>Tel. <a href="tel:{{ contact.phone }}">{{ contact.phone }}</a><br>
|
<p>Tel. <a href="{{ contact.phone_link }}">{{ contact.phone }}</a><br>
|
||||||
<a href="{{ contact.email }}">{{ contact.email }}</a><br>
|
<a href="{{ contact.email_link }}">{{ contact.email }}</a><br>
|
||||||
<a href="{{ contact.www }}">{{ contact.www }}</a></p>
|
<a href="{{ contact.www }}">{{ contact.www_domain }}</a></p>
|
||||||
</address>
|
</address>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="col-md-4" id="contactform">
|
||||||
|
|
||||||
|
<form action="https://formspree.io/{{ contact.email }}" method="POST">
|
||||||
|
<div class="form-group">
|
||||||
|
<input name="name" id="name" type="text" placeholder="Name / Nom" class="form-control">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<input name="_replyto" id="email" type="email" placeholder="E-Mail" class="form-control">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<textarea name="message" id="message" rows="3" placeholder="" class="form-control"></textarea>
|
||||||
|
</div>
|
||||||
|
<button class="btn btn-priamry" type="submit">Senden / Envoi</button>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
from django import template
|
from django import template
|
||||||
from django.utils import translation
|
from django.utils import translation
|
||||||
|
|
||||||
from ..snippets import Contact
|
from ..models.snippets import Contact
|
||||||
|
|
||||||
register = template.Library()
|
register = template.Library()
|
||||||
|
|
||||||
|
@ -10,5 +10,5 @@ register = template.Library()
|
||||||
@register.inclusion_tag('tags/contact_info.html')
|
@register.inclusion_tag('tags/contact_info.html')
|
||||||
def contact_info():
|
def contact_info():
|
||||||
return {
|
return {
|
||||||
'contact': Contact.objects.first(),
|
'contact': Contact.objects.last(),
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{% load wagtailcore_tags navigation %}
|
{% load wagtailcore_tags navigation information %}
|
||||||
{% get_site_root as site_root %}
|
{% get_site_root as site_root %}
|
||||||
|
|
||||||
<!-- Footer -->
|
<!-- Footer -->
|
||||||
|
@ -9,27 +9,7 @@
|
||||||
<!-- Bottom Menu -->
|
<!-- Bottom Menu -->
|
||||||
{% footer_menu parent=site_root calling_page=self %}
|
{% footer_menu parent=site_root calling_page=self %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
{% contact_info %}
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-4" id="contact">
|
|
||||||
{{ contact_info }}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-md-4">
|
|
||||||
<form action="https://formspree.io/info@datalets.ch" method="POST">
|
|
||||||
<div class="form-group">
|
|
||||||
<input name="name" id="name" type="text" placeholder="Name" class="form-control">
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<input name="_replyto" id="email" type="email" placeholder="E-Mail" class="form-control">
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<textarea name="message" id="message" rows="3" placeholder="Anfrage" class="form-control"></textarea>
|
|
||||||
</div>
|
|
||||||
<button class="btn btn-priamry" type="submit">Senden</button>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div><!-- /row -->
|
</div><!-- /row -->
|
||||||
</div><!-- /container -->
|
</div><!-- /container -->
|
||||||
</footer>
|
</footer>
|
||||||
|
|
Loading…
Add table
Reference in a new issue